泛型笔记

来源:互联网 发布:好好说话值得买吗 知乎 编辑:程序博客网 时间:2024/04/28 11:53

Default关键字:
可以取泛型类的默认值,值类型返回0;引用类型返回Null。
如:Default(T); 

using关键字:
using list = ListedList<int, string>;
list obj = new list();
这里的using是为泛型起别名。

where关键字:
1. 实现泛型约束,如 where K : IComparable
2. 约束要放在类的继承列表之后。
3. 多个约束使用逗号分开,如 where K : IComparable<K>, IConvertable
4. 可以同时约束一个基类以及一个或多个接口,但是该基类必须首先出现在派生约束列表中,如 where K : myBaseClass, IComparable<K>, IConvertable
5. 可以约束泛型类的继承关系,如 public class MyClass<T,U> where T : U
6. 约束泛型类必须具有某个类型的构造函数,如 class Node<K,T> where T : new()。构造函数约束必须放在约束列表的最后。
7. 值类型约束:where T : struct
8. 引用类型约束:where T : class

泛型类的类型转换:
1. 泛型类的约束派生类或接口将会限定其可以隐式转换的类别。
2. 编译器允许将泛型类显式强制转换到其他任何接口。
3. 可以使用Object类型做为泛型类与某个类进行转换的中介。
4. 使用is和as运算符可以增强安全性。

泛型在继承中的使用:
1. 可以指定子类继承父类的具体实参类型。如:
public class BaseClass<T>
{...}
public class SubClass : BaseClass<int>
{...}

2. 也可以继承父类的泛型参数类型。如:
public class BaseClass<T>
{...}
public class SubClass<T> : BaseClass<T>
{...}

3. 父类泛型如果有约束,子类在继承时必须重复该约束。

泛型方法:
1. 方法可以使用其自己的泛型类型作为参数或返回值,哪怕是类本

身并未使用泛型。
2. 调用泛型方法时,可以不指定泛型的实际类型,系统可以自动根

据参数类型推断泛型类型。
3. 泛型方法的泛型类也可以指定约束。

泛型委托:
1. 委托中也可以使用泛型。
2. 委托也可以定义自己的泛型类型。
3. 在类的外面定义的委托也可以使用泛型。


泛型与反射:
1. 反射中也可以使用泛型,Type可以表示一个绑定或未绑定实际类

型的泛型类。
2. typeof和GetType()可以对泛型参数进行操作。
3. 未绑字泛型类使用空尖括号表示,如:typeof(LinkedList<,>)。
4. type类中新增了方法和属性以支持泛型。

其它:
1. 不允许定义泛型属性,但属性里面可以使用泛型实参。
2. DotNet2.0中System.Collections.Generic中是支持泛型的集合。
3. Web Service的方法中不能使用泛型。
4. 服务组件的不能使用泛型。

PS:
Debug.Assert —— 原来C#支持断言;