使用泛型,您可以添加约束,这意味着提供的泛型类型必须满足一些条件,例如:
where T : new()- T必须有一个公共无参数构造函数(或者是一个struct)where T : class- T必须是引用类型(class/ interface/ delegate)where T : struct- T必须是值类型(除了Nullable<TSomethingElse>)where T : SomeBaseType- T必须继承自SomeBaseType(或SomeBaseType本身)where T : ISomeInterface- T必须实施ISomeInterface例如:
public void SomeGenericMethod<T>(T data) where T : IEnumerable {
foreach(var obj in data) {
....
}
}
Run Code Online (Sandbox Code Playgroud)
它是SomeBaseType和ISomeInterface是有趣在这里,因为他们让你的需求(和使用)这些类型定义的功能-例如,where T : IList您可以访问Add(...)等.但是!简单地说:没有这样的机制,例如:
所以:你不能要求那些,你不能使用它们(除了通过反射).但是,其中一些dynamic可以使用.
所以,基本上:
public class A{}
public class B{
public static void Foo() {}
}
Run Code Online (Sandbox Code Playgroud)
您不能为Tin 编写通用约束:
public class C<T> {}
Run Code Online (Sandbox Code Playgroud)
这样您就可以限制仅接受A或B基于静态方法的存在或不存在Foo().
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |