C# 泛型类与泛型函数的实例学习
本文导语: 所谓泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。 泛型可以用于类,也可以用于函数。 我们来看下面的例子。 泛型类: public class MyClass { publ...
所谓泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。
泛型可以用于类,也可以用于函数。
我们来看下面的例子。
泛型类:
{
public T MyElement { get; set; }
}
泛型函数:
{
throw new NotImplementedException();
}
不过,当你需要对MyElement进行实例化时,却不能使用new()。
添加如下代码即可实例化:
泛型类:
public class MyClass where T: new()
{
public T MyElement { get; set; }
public MyClass()
{
this.MyElement = new T();
}
}
泛型函数:
{
return new T();
}
代码说明:
where作为对泛型类型T的一个限定或补充。
如果希望T是一个int的集合,这个集合可以是List,也可以是HashSet等等,只要它们都是从ICollection继承而来的,则可以添加对类型T的限定,同时要保证它还是可以实例化的:
where T : ICollection, new()
{
return new T();
}
进一步,如果希望放宽集合中元素的类型,比如只要是int,double等可比较的类型,它们都是从IComparable继承而来,则可以继续添加如下限定:
where T : ICollection, new()
where S : IComparable
{
return new T();
}
C# 的泛型类型用起来很方便,这里再为大家补充下C#泛型机制:
C#泛型能力有CLR在运行时支持:C#泛型代码在编译为IL代码和元数据时,采用特殊的占位符来表示范型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以“on-demand”的方式,发生在JIT编译时。
对C#泛型如果可以应用自如,举一反三的话,就可以写出更为简洁高效的代码。
,祝大家学习进步。