Задать вопрос

Как подавить автогенерацию метода 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.
  • Вопрос задан
  • 176 просмотров
Подписаться 3 Средний Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Software-testing.ru
    Программирование на C# для тестировщиков
    10 недель
    Далее
Пригласить эксперта
Ответы на вопрос 1
В record'е можно реализовать ToString явно - тогда не сгенерируется его дефолтная версия.
Или можно тупо не использовать рекорды

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

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

Похожие вопросы