@romaro

Как узнать обо всех инстансах класса, после добавления к его интерфейсу нового свойства?

Например, у меня есть интерфейс культуры:
public interface ICultureNode
    {
        public string Ru_RU { get; init; }
        public string En_US { get; init; }
    }


И несколько классов, которые его реализуют:
public class ExeptionCultureNode : ICultureNode
    {
...
        public string Ru_RU { get; init; }
        public string En_US { get; init; }
    }
...


Если я добавлю новое поле в интерфейс и класс, который его реализует, то могу ли я получить оповещение от IDE (либо выборку через обращение к API сборки), в которой будут перечислены все места кода, где создаются инстансы условного ExeptionCultureNode, чтобы поддержать там новое поле.

Спрашиваю потому, что привык к поведению TypeScript, который откажется компилироваться, если к интерфейсу добавлено обязательное поле (до тех пор, пока это поле не будет поддержано для всех объектов).

Пока приходит в голову только добавить во все определения классов выброс исключения (в продакшене просто дефолтный текст через #if):
public class ExeptionCultureNode : ICultureNode
    {
        public string Ru_RU { get; init; }
        public string En_US { get; init; }
        public string En_CA { get => throw new NotImplementedException(); init => throw new NotImplementedException(); }
    }
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
C C# 11 ты можешь использовать ключевое слово required.
public interface ICultureNode
{
        public string Ru_RU { get; init; }
        public string En_US { get; init; }
}
public class SimpleCultureNode : ICultureNode 
{
        public required string Ru_RU {get; init;}
        public required string En_US {get;init;}
}

Если забудешь инициализировать, то получишь ошибку компиляции CS9035

Ещё вариант - использовать конструкторы. Ведь они давно на то и существуют, чтобы обязывать тебя инициализировать всё.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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