.NET开发基础:从简单的例子理解泛型 分享(4)

Console.WriteLine((new Compare<Boy>().WhoIsBetter(boy1, boy2)).Name);
    Console.WriteLine((new Compare<Girl>().WhoIsBetter(girl1, girl2)).Name);
    Console.WriteLine(new Compare<int>().WhoIsBetter(boy1.Height, boy2.Height));
    Console.WriteLine(new Compare<string>().WhoIsBetter(boy1.Name, girl1.Name));
    Console.ReadLine();
}
 


这段代码在优雅度上完胜非泛型,并且可重用性大大提升,可以说它支持所有类型的比较,只要这个类型实现了IComparable接口,同时一劳永逸,不再需要在方法内部作任何扩展。
public class Compare<T> where T : IComparable{
    //...
}
泛型类的定义是在类名后面跟上<T>,这个是泛型专用语法,T表示传递进来的类型,你也可以用别的字母代替。
where T : IComparable ,从字面上就能理解,这段表示对T的类型约束。程序是遵循人的意志来执行的,按前面的例子,如果莫名其妙的让程序比较两个object,它没办法知道该去怎么比较。所以我们必须告诉程序,T必须是可比较的类型,T必须实现了IComparable接口。
关于泛型参数约束,MSDN提供了一张表格:

约束 说明
T:结构 类型参数必须是值类型。可以指定除Nullable 以外的任何值类型。
T:类 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
T:new() 类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。
T:<基类名> 类型参数必须是指定的基类或派生自指定的基类。
T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
T:U 为T 提供的类型参数必须是为U 提供的参数或派生自为U 提供的参数。 

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgjfz.html