Как подавить автогенерацию метода ToString у record в c#?

Новые типы record автогенерируют несколько методов, в том числе ToString.
Если в базовом типе-record переопределить этот метод, то он все равно переопределяется автоматически в дочерних.
Объявить его как sealed нельзя, т.к. автогенерация все равно неявно произойдет - происходит ошибка компиляции.

Вопрос: можно ли как-то "подавить" автогенерацию? С помощью атрибутов, например.

Дело в том, что весь код генерируется из шаблонов t4 по файлам XML.
На данный момент вставлен костыль в базовый метод:
public virtual string Presentation() => //... тут дефолтное поведение
public override string ToString() => Presentation();

и во все автогенерируемые наследники:
public override string ToString() => Presentation();
Предполагается, что в наследуемых partial record будет переопределяться при необходимости метод Presentation.
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
В record'е можно реализовать ToString явно - тогда не сгенерируется его дефолтная версия.
Или можно тупо не использовать рекорды

UPD: Поэкспериментировал с рекордами и вот вывод:
1.
sealed override string ToString()
Так можно делать только в sealed record
2. Рекорд не наследует ToString от родителя - вместо этого он определяет свой собственный
3. В рекоде можно спокойно переопределить ToString
Если вы не хотите переопределять ToString во всех рекордах, то, возможно, вам нужны не рекорды, а обычные классы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы