C# 泛型类与泛型函数的实例学习

发布时间:2020-05-26编辑:脚本学堂
在C#中泛型的应用还是很广泛的,本文为大家举几个C#泛型类与泛型函数的例子,有需要的朋友,不要错过哦。

所谓泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。
泛型可以用于类,也可以用于函数。

我们来看下面的例子。

泛型类:
 

public class MyClass<T>
{
public T MyElement { get; set; }
}

泛型函数:
 

public T ReturnElement<T>()
{
throw new NotImplementedException();
}

不过,当你需要对MyElement进行实例化时,却不能使用new()。
添加如下代码即可实例化:

泛型类:
 

public class MyClass<T> where T: new()
{
public T MyElement { get; set; }

public MyClass()
{
this.MyElement = new T();
}
}

泛型函数:
 

public T ReturnElement<T>() where T : new()
{
return new T();
}
 

代码说明:
where作为对泛型类型T的一个限定或补充。
如果希望T是一个int的集合,这个集合可以是List<int>,也可以是HashSet<int>等等,只要它们都是从ICollection继承而来的,则可以添加对类型T的限定,同时要保证它还是可以实例化的:
 

public T ReturnElement<T>()
where T : ICollection<int>, new()
{
return new T();
}

进一步,如果希望放宽集合中元素的类型,比如只要是int,double等可比较的类型,它们都是从IComparable继承而来,则可以继续添加如下限定:
 

public T ReturnElement<T, S>()
where T : ICollection<S>, new()
where S : IComparable
{
return new T();
}

C# 的泛型类型用起来很方便,这里再为大家补充下C#泛型机制:
C#泛型能力有CLR在运行时支持:C#泛型代码在编译为IL代码和元数据时,采用特殊的占位符来表示范型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以“on-demand”的方式,发生在JIT编译时。

对C#泛型如果可以应用自如,举一反三的话,就可以写出更为简洁高效的代码。
脚本学堂,祝大家学习进步。