Сообщение Re[2]: record, mutable field? от 04.01.2021 16:42
Изменено 04.01.2021 16:43 Silver_S
Re[2]: record, mutable field?
S_S>Если в record хочется добавить вычисляемое get property, но надо закешировать результат в mutable field (больше некуда). Как этот field исключить из ToString, GetHashCode, Equals?
S_S>Если вручную переопределять все GetHashCode, Equals, ToString, то половина преимуществ record пропадает.
Хотя обходные пути есть — добавить это поле в производном record, а переопределения GetHashCode,.. направить на base.
Но плохо, что конструктор надо снова переопределять. Если был краткий primary конструктор, то много лишней писанины.
Лучше бы сделали, чтобы в производном record, в таких конструкторах неявно добавлялись параметры из base record.
S_S>Если вручную переопределять все GetHashCode, Equals, ToString, то половина преимуществ record пропадает.
Хотя обходные пути есть — добавить это поле в производном record, а переопределения GetHashCode,.. направить на base.
Но плохо, что конструктор надо снова переопределять. Если был краткий primary конструктор, то много лишней писанины.
Лучше бы сделали, чтобы в производном record, в таких конструкторах неявно добавлялись параметры из base record.
public record Rec1(int Prop1)
{
public int Prop1 { get; init; }
}
public record Rec2(int Prop2) : Rec1 // Ошибка. В производном такие конструкторы нельзя. Если в базовом нет без параметров. Лучше бы неявно превращался в конструктор: Rec2(int Prop1, int Prop2)
{
}
Re[2]: record, mutable field?
S_S>Если в record хочется добавить вычисляемое get property, но надо закешировать результат в mutable field (больше некуда). Как этот field исключить из ToString, GetHashCode, Equals?
S_S>Если вручную переопределять все GetHashCode, Equals, ToString, то половина преимуществ record пропадает.
Хотя обходные пути есть — добавить это поле в производном record, а переопределения GetHashCode,.. направить на base.
Но плохо, что конструктор надо снова переопределять. Если был краткий primary конструктор, то много лишней писанины.
Лучше бы сделали, чтобы в производном record, в таких конструкторах неявно добавлялись параметры из base record.
S_S>Если вручную переопределять все GetHashCode, Equals, ToString, то половина преимуществ record пропадает.
Хотя обходные пути есть — добавить это поле в производном record, а переопределения GetHashCode,.. направить на base.
Но плохо, что конструктор надо снова переопределять. Если был краткий primary конструктор, то много лишней писанины.
Лучше бы сделали, чтобы в производном record, в таких конструкторах неявно добавлялись параметры из base record.
public record Rec1(int Prop1)
{
}
public record Rec2(int Prop2) : Rec1 // Ошибка. В производном такие конструкторы нельзя. Если в базовом нет без параметров. Лучше бы неявно превращался в конструктор: Rec2(int Prop1, int Prop2)
{
}