有什么例子可以在C#/ VB.NET中使用泛型,为什么要使用泛型?
简单地说,您声明一个带有额外标签的类型或方法来指示通用位:
class Foo{ public Foo(T value) { Value = value; } public T Value {get;private set;} }
以上定义了泛型Foo
"of T
",其中T
由调用者提供.按照惯例,一般类型参数启动与T.如果只有一个,T
是好的-否则他们的名字都有效:TSource
,TValue
,TListType
等
与C++模板不同,.NET泛型由运行时提供(不是编译器技巧).例如:
Foofoo = new Foo (27);
所有T
s都已被int
上面的替换.如有必要,可以使用约束限制泛型参数:
class Foowhere T : struct {}
现在Foo
将拒绝编译 - 因为string
它不是结构(值类型).有效约束是:
T : class // reference-type (class/interface/delegate) T : struct // value-type except NullableT : new() // has a public parameterless constructor T : SomeClass // is SomeClass or inherited from SomeClass T : ISomeInterface // implements ISomeInterface
约束也可以涉及其他泛型类型参数,例如:
T : IComparable// or another type argument
您可以根据需要使用尽可能多的通用参数:
public struct KeyValuePair{...}
其他注意事项:
静态成员等是根据泛型类型组合定义的- 因此静态字段on Foo
与其相对Foo
.
方法也可以是通用的 - 尽量避免使用与类使用相同的名称,因为您将无法消除歧义
嵌套类型从父项继承泛型类型
例如:
class Foo{ class Bar {} // is effectively Bar , for the outer T }
示例1:您想要创建三级类
Class Triple{ T1 _first; T2 _second; T3 _Third; }
示例2:将解析给定数据类型的任何枚举值的辅助类
static public class EnumHelper{ static public T Parse(string value) { return (T)Enum.Parse(typeof(T), value); } }