我想知道是否(如果可以的话)是否可以将命名空间定义为泛型类声明中的约束参数。
我的是这样的:
命名空间
MyProject.Models.Entities <-- 包含我要在数据库中持久化的类
命名空间
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 和具有继承的映射实体,尽管可能会增加一层不需要的复杂性。
那么,是否可以将泛型类参数约束到命名空间而不是特定类型?
最佳答案
不可能对命名空间创建任何此类约束。
一个更可取的解决方法是让你的泛型类internal
而不是public
。这意味着该类只能被同一程序集中的类直接实例化和访问(除非您使用InternalsVisibleTo
属性)。但是,它仍然可以间接实例化(即作为公共(public)类的 protected /私有(private)成员)。
关于c# - 具有泛型类声明的命名空间约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032428/