具有generics类声明的命名空间约束

我想知道是否(如果是这样的话)可以将命名空间定义为generics类声明中的约束参数。

我有的是这个:

namespace MyProject.Models.Entities < – 包含要在db中保留的类

namespace MyProject.Tests.BaseTest < – 我觉得很明显

现在我的’BaseTest’课程的变化看起来像这样;

 public class BaseTest 

BaseTest (在编写本文时)执行的操作比删除测试期间添加到数据库的所有实体要多得多。 所以通常我会将测试类声明为:

 public class MyEntityRepositoryTest : BaseTest 

我想要做的是类似于以下内容:

 public class BaseTest where T :  

现在我知道完全可以简单地声明一个’BaseEntity’类, MyProject.Models.Entities命名空间中创建的所有实体都将从该类inheritance;

 public class BaseTest where T : MyBaseEntity 

但是……我实际上并不需要或想要。 另外,我使用ORM和带有inheritance的映射实体,虽然可能,但增加了一层不需要的复杂性。

那么,是否可以将generics类参数约束到命名空间而不是特定类型?

无法为命名空间创建任何此类约束。

更优选的解决方法是使您的generics类internal而不是public 。 这意味着该类只能由同一程序集中的类直接实例化和访问(除非您使用InternalsVisibleTo属性)。 但是,它仍然可以间接实例化(即作为公共类的受保护/私有成员)。

命名空间约束没有价值。 任何第三方都可以创建一个类并将该类放入同一个命名空间。

编译器不会为您执行此检查。 您可以在运行时validation此约束,可能在您的类型的静态构造函数中。