泛型的作用:让类或者方法,从复制粘贴 变成单个的通用访问
1、泛型类、泛型方法、泛型接口、泛型委托
/// <summary> /// 泛型方法 /// </summary> public class GenericTest { public static void Show<T>(T tParameter) { Console.WriteLine("This is {0},parameter={1},type={2}", typeof(CommonMethod), tParameter.GetType().Name, tParameter); } } /// <summary> /// 泛型类型 就是一个类型 满足多个类型的需求 /// </summary> /// <typeparam name="T"></typeparam> public class GenericClass<T> {
public T name{get;set;} } public class ChildClass<S, T> : GenericClass<S>, GenericInterface<T> { } public class ChildClass1 : GenericInterface<int> { } /// <summary> /// 泛型接口 就是一个接口 满足多个多个类型的需求 /// </summary> /// <typeparam name="T"></typeparam> public interface GenericInterface<T> { } /// <summary> /// 泛型委托 就是一个委托 满足多个多个类型的需求 /// </summary> /// <typeparam name="T"></typeparam> public delegate void Do<T>();
2、定义泛型缓存,用于性能优化,存的是hash 如果数据多了也会有性能问题
/// <summary> /// 1字典缓存:静态属性常驻内存 2根据不同类型会生成不同的副本 3泛型缓存本质上是一个泛型类 /// </summary> public class DictionaryCache { private static Dictionary<Type, string> _TypeTimeDictionary = null; static DictionaryCache() { Console.WriteLine("This is DictionaryCache 静态构造函数"); _TypeTimeDictionary = new Dictionary<Type, string>(); } public static string GetCache<T>() { Type type = typeof(T); if (!_TypeTimeDictionary.ContainsKey(type)) { _TypeTimeDictionary[type] = string.Format("{0}_{1}", typeof(T).FullName, DateTime.Now.ToString("yyyyMMddHHmmss.fff")); } return _TypeTimeDictionary[type]; } }
3.泛型 约束
public static void Show<T>(T tParameter) where T : People //基类约束,你只能是一个People ,所以这里参数只能传入People或者People子类 //where T : ISports // 接口约束 //where T : class // 引用类型约束 就只能传入引用类型的参数 //where T : struct // 值类型约束 //where T : new()// 无参数构造偶函数约束 //where T : class, new() // 泛型约束可以结合使用 ,用逗号分隔就OK { }