Обеспечить наследование в .net - PullRequest
2 голосов
/ 24 ноября 2010

Возможно ли принудительное наследование в .net?

Например, у меня есть проект библиотеки классов, который содержит базовый класс, скажем, «BaseEntity». У меня есть 3 класса сказать «EntityA», «EntityB» и «EntityC», и все эти классы наследуют от этого базового класса. Теперь, когда я создаю другой класс в этом проекте, .net должен выдать мне ошибку времени компиляции, которую этот класс не наследует от класса «BaseEntity».

Ответы [ 2 ]

7 голосов
/ 24 ноября 2010

Вы не можете заставить компилятор C # сделать каждый класс в проекте наследуемым от определенного другого класса, нет. Как и вы. Что если вы хотите создать какой-нибудь вспомогательный класс или другой не-сущностный класс? Почему все в проекте должно быть сущностью?

Теперь двумя способами можно принудительно наследовать:

  • Вы можете сделать BaseEntity абстрактным классом, чтобы каждый раз, когда вы имели дело с экземпляром BaseEntity, вы действительно имели дело с экземпляром некоторого производного класса.
  • Вы можете написать универсальный тип или метод, используя параметр типа с ограничением, таким, что аргумент типа должен быть BaseEntity или производный класс:

    public void EntityLoader<T> where T : BaseEntity
    

Ни то, ни другое вы не просили, но они есть в наличии.

1 голос
/ 24 ноября 2010

Если вы действительно хотите это сделать (и я думаю, что Джон Скит прав, когда говорит, что не следует), вы можете написать вспомогательную утилиту командной строки, которая загружает конкретную сборку, проверяет ваши правила наследования с помощью отражения.Чтобы получить ошибку времени компиляции, вызовите эту программу в событии postbuild вашего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...