c# - 具有泛型类声明的命名空间约束

标签 c# generics parameters constraints

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

我的是这样的:

命名空间 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/

相关文章:

c# - RSA C# 加密 Java 解密

c# - 在标签名称中使用变量

Java 泛型类 < ?扩展接口(interface) > 作为参数

java - 通用混沌Java

java - 为什么修改了 ArrayList 参数,但没有修改 String 参数?

c++ - 无论如何让 Visual Studio C++ 自动完成参数列表?

c# - Unity销毁实例化克隆停止实例化

c# - 为 C# .NET 编写 typeof(Xml) 的正确方法是什么?

c# - 如果类型参数是结构或类,则选择泛型实现

C# 泛型函数