Q-->question A-->answer M-->mention
The Chapter 16th Generic
M:泛型为一种特殊机制,它支持除继承外的另一种代码重用,也就是"算法重用".
M:泛型中的T为一变量名,在源代码中能够使用一个数据类型的地方都能使用T:可做类中的字段,也能做局部变量,其使用时具体的数据类型被称为"类型实参",Type argument
Q:泛型可带来何种好处?
A:1.源码的保护=>不需要访问算法的源码,而C++或者Java的泛型技术则必须提供给准备使用泛型算法的客户
2.类型安全性=>编译器将保证只有与指定数据类型兼容的对象才能随同算法使用
3.更加清晰的代码=>强制了类型安全,因此不需要进行转换
4.更佳的性能=>不必在转型尝试时检查类型安全,同时也减少了拆箱的次数(相对于值类型).不过,对引用类型,其性能和非泛型算法所差无几
M:设计规范=>泛型变量要么为T,要么为T开头,大写T代表Type,这和Interface一样
M:泛型类的继承和派生=>由于其本质还是一个类型,所以它可以从任何类型派生
Q:using有何用法?
A:1.导入命名空间 using System.Diagnostic;
2.释放资源 using(SqlConnection conn = new SqlConnection()){}
3.定义别名 using AAA = System.IO.FileStream..
泛型的同一性identity和相等性equivalence即可用此方法解决
M:where子句是一个约束(constraint),以下为实例=>
public static T Min<T>(T o1,T o2) where T:IComparable<T>
where关键字告诉编译器为T指定的任何类型都必须实现同一类型的泛型IComparable接口
M:所有的值类型都拥有一个public无参构造器(隐式),两种特殊的主要约束=>
1. where T:class --->允许类型实参为任何引用类型
2. where T:struct --->值类型
M:主要约束=>为引用类型,其只能有零个或一个,而将要约束则可以有零个或多个,其为一种接口类型,构造器约束只可以指定零个或一个