Ограничение пространства имен с универсальным объявлением класса

Я хотел бы знать, возможно ли (и раз так как) определить пространство имен как параметр ограничения в универсальном объявлении класса.

То, что я имею, является этим:

namespace MyProject. Модели. Объекты <-Содержат мои классы, которые будут сохранены в дб

namespace MyProject. Тесты. BaseTest <-Очевидный я думаю

Теперь объявление моего класса 'BaseTest' похоже так;

public class BaseTest<T>

Это BaseTest делает немного больше (во время записи), чем удаляют все объекты, которые были добавлены к базе данных во время тестирования. Так же обычно мне объявят тестовый класс как:

public class MyEntityRepositoryTest : BaseTest<MyEntity>

То, что я ХОТЕЛ БЫ сделать, является чем-то подобным следующему:

public class BaseTest<T> where T : <is of the MyProject.Models.Entities namespace>

Теперь я знаю, что было бы совершенно возможно просто объявить класс 'BaseEntity', из которого все объекты создали в MyProject.Models.Entities пространство имен наследуется;

public class BaseTest<T> where T : MyBaseEntity

но... Я не на самом деле должен или хочу. Плюс я использую ORM и отображаю объекты с наследованием, хотя возможно, добавляет слой сложности, которая не требуется.

Так, действительно ли возможно ограничить универсальный параметр класса к пространству имен и не определенному типу?

6
задан John Saunders 13 June 2010 в 13:51
поделиться

3 ответа

Создать такие ограничения пространств имен.

Более предпочтительным обходным решением было бы сделать общий класс внутренним , а не открытым . Это означает, что класс может быть напрямую создан и доступен только классам в той же сборке (если вы не используете атрибут InternalsVisibleTo ). Однако он все еще может быть косвенно создан (то есть как защищенный / закрытый член открытого класса).

12
ответ дан 8 December 2019 в 12:57
поделиться

Ограничение пространства имен не имеет значения. Любая третья сторона может создать класс и поместить его в то же пространство имен.

4
ответ дан 8 December 2019 в 12:57
поделиться

Компилятор не будет выполнять эту проверку за вас. Однако вы можете проверить это ограничение во время выполнения, возможно, в статическом конструкторе для вашего типа.

2
ответ дан 8 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

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