具有命名空间限制的通用类型

时间:2012-02-25 15:32:44

标签: c# generics

每个人都知道

public class Test<T> where T : SomeBaseClass

但是有没有办法将T限制为像

这样的名称空间中存在的类
public class Test<T> where T in SomeNamespace

祝你好运

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:1)

没有。约束是关于指定行为 - 无论是作为类,实现给定接口还是其他任何内容都是如此简单。它是关于定义一个类的命名空间 - 它没有说明它的行为。

有关约束摘要,请参阅Constraints on Type Parameters

答案 2 :(得分:1)

无法使用命名空间约束。无论如何,它并没有任何意义,因为每个人都可以创建位于目标命名空间中的类。如果你可以将它限制在特定的程序集中,它可能只会出现。

如果您可以将其限制为n类型,如以下行(不起作用),会更加明确:

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

参见约束

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

答案 3 :(得分:0)

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

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

所有这一切,它仍然听起来不像是尝试和实现的那种东西。