基本知识
- 泛型需要编译器支持+JIT支持,不是语法糖
泛型约束
//约束不能是密封类
public static void show<T>(T value)
where T :People
where T:class
where T:struct
where T:new() //无参数构造函数约束
{
Console.WriteLine("This is {0},name = {1},age={2}", typeof(CwbGeneric), value.name, value.age);
value = default(T); //根据运行时类型自动初始化
}
协变in 逆变 out
/*out 限制 泛型 接口 委托 被out修饰的值 只能作为返回值
Func<鸟> s = new Func<麻雀>;
*/
/*in 修饰的泛型T 只能作为参数
如 Ifunc<in t> 为自己定义的接口
而 funcClass:Ifunc
Ifunc<麻雀> s = new FuncClass<鸟>(); //因为in确定 传入值一定是
Ifunc<麻雀> s = new FuncClass<麻雀>();
*/
标签:value,泛型,new,where,Ifunc,out
From: https://www.cnblogs.com/cwb8023/p/17580905.html