注意点:
首先,结构的声明要加入<T>,如 MyPoint<T>, 不然结构体里面用到T会混淆。
其次,default关键字的新用法:除了在Switch里面的用法;在泛型里面表示该类型的默认值。比如int的默认值为0;引用型的默认值为null。 span class="Title">
最后,泛型允许加入where关键字来限定传入的类型。主要包括
where T : struct 必须传入值类型
wehre T: class 必须传入引用类型
where T: new() 必须具有默认的构造函数(当你需要new一个T的实例出来的时候,它具有默认构造函数就很重要了)
where T:SomeClassName 必须从指定的类继承
where T:SomeInterface 必须实现指定的接口
where T:operation + 必须实现+运算
当需要多个限制的时候,使用','分隔即可。
实例:
public struct MyPoint<T>
{
private T a;
private T b;
public MyPoint(T xVal, T yVal)
{
a = xVal;
b = yVal;
}
public override string ToString()
{
return string.Format("the x is {0},y is {1}", a.ToString(), b.ToString());
}
public void ResetMyPoint()
{
a = default(T);
b = default(T);
}
}
class Program
{
static void Main(string[] args)
{
MyPoint<int> mp = new MyPoint<int>(2, 4);
Console.WriteLine(mp.ToString());
mp.ResetMyPoint();
Console.WriteLine(mp.ToString());
MyPoint<double> mp2 = new MyPoint<double>(2.5, 3.5);
Console.WriteLine(mp2.ToString());
mp2.ResetMyPoint();
Console.WriteLine(mp2.ToString());
}