具有命名空间限制的泛型类型

本文关键字:泛型类型 命名空间 | 更新日期: 2023-09-27 18:25:51

每个人都知道

public class Test<T> where T : SomeBaseClass

但是,有没有一种方法可以将T限制为存在于像这样的命名空间中的类

public class Test<T> where T in SomeNamespace

向致以最良好的问候

具有命名空间限制的泛型类型

否。没有办法将泛型类型约束到命名空间。

命名空间约束是不可能的。无论如何,它没有任何意义,因为每个人都可以创建位于目标命名空间中的类。只有当你能把它限制在一个特定的程序集上,它才有意义。

如果您可以将其限制为n类型,如以下行(不起作用),则会更有意义:

public T Create<T>() where T : { MyClass1, MyClass2 }

请参见约束

http://msdn.microsoft.com/en-us/library/d5x73970.aspx

否。约束是关于指定行为的——无论是作为一个类、实现一个给定的接口还是其他什么。这不是关于类在哪个命名空间中定义的,也没有说明它的行为。

有关约束摘要,请参见类型参数的约束

您可以通过创建一个具有内部作用域的接口并在泛型where子句中使用该接口来实现这一点(泛型类/方法需要在同一程序集中)。然后,您只能将它与实现该接口的同一程序集中的类一起使用。

如果需要从另一个程序集传递类,可以将global::InternalsVisibleToAttribute("其他程序集名称")添加到AssemblyInfo文件中。

尽管如此,这听起来仍然不是一件需要尝试和实现的事情。