Я хотел бы знать, если (и если да, то как), можно определить пространство имен в качестве параметра ограничения в объявлении общего класса.Ограничение пространства имен с объявлением общего класса
Что у меня есть это:
namespace
MyProject.Models.Entities < - Содержит мои классы сохраняться в БД
namespace
MyProject.Tests.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 и объекты сопоставления с наследованием, хотя это возможно, добавляет уровень сложности, который не требуется.
Итак, возможно ли ограничить общий параметр класса пространством имен, а не конкретным типом?
Согласовано. И, если тип, который вы хотите разрешить, находится в другой сборке, посмотрите на «InternalsVisibleToAttribute». Я использую это с модульными тестами в разных сборках регулярно. –
Это позор, я удивлен, вы не можете что-то сделать с лямбда-выражениями или чем-то еще. Чтобы не волноваться, это «внутреннее» решение удовлетворяет мои потребности на полпути. Спасибо за руководство. – SomeGuy
@SomeGuy, насколько я знаю, lambdas по-прежнему остается только временем выполнения (за исключением случаев, когда используется с выражениями, но даже тогда они не исполняются во время компиляции). Было некоторое обсуждение о том, может ли предполагаемая функция компилятора как функция C# 5.0 допускать некоторую настройку компилятора, хотя у меня есть сомнения, если мы когда-нибудь это увидим. –