标签:
1-什么是泛型
对类型的延迟声明
1 public class GenericMethod 2 { 3 /// <summary> 4 /// 泛型方法 5 /// </summary> 6 /// <typeparam name="T"></typeparam> 7 /// <param name="tValue"></param> 8 public static void Show<T>(T tValue) 9 { 10 Console.WriteLine(" Show<T>方法 展示{0},其类型为{1},其类型2为{2}", tValue, tValue.GetType(), typeof(T)); 11 } 12 13 14 public static void ShowSome<T, M, S, SM, SD, t, s, w, CLASS>(T tValue, M mValue) 15 { 16 Console.WriteLine(" Show<T>方法 展示{0},其类型为{1},其类型2为{2}", tValue, tValue.GetType(), typeof(T)); 17 } 18 }
延迟声明在一个<T>里T,T 是一个占位符,不一定非得T
2.写法
在类后面加上<T>
public class GenericMe<T>{...}
则在其内部的函数可以直接使用T,只需要在声明时加上:
GenericMethod<T是什么类型比如:string> a = new GenericMethod<T是什么类型比如:string>
泛型函数则是:
1 public void Show<T>(T tValue) 2 { 3 Console.WriteLine(" Show<T>方法 展示{0},其类型为{1},其类型2为{2}", tValue, tValue.GetType(), typeof(T)); 4 }
使用:
eg: 当前类.Show<int>(5)或者
当前类.Show(5)//可以自己推断
3.约束:
接口约束:where T:Interface 必须显示的实现接口
基类约束:where T:BaseClass 参数必须为BaseClass或者派生类
类约束:where T:class T必须是引用类型
值类型约束: where T:struct T必须是值类型
构造函数约束: where T:new() 必须有默认的构造函数
泛型类型约束: Where T:T1
4.默认值:
T t=defalut(T); 如果T是值类型,则t=0;如果T是引用类型,则t=null.
private static T Get<T>() where T : struct//值类型 {
return default(T);
}
private static T Get<T>() where T : class { return default(T); }
标签:
原文地址:http://www.cnblogs.com/anwser-jungle/p/5443190.html