一、泛型 泛型就是封裝,將重覆的工作簡單化 1.泛型方法 public static void Show<T>(T tParameter) { Console.WriteLine("This is {0}, parameter = {1}, type = {2}", typeof(CommonMet ...
一、泛型
泛型就是封裝,將重覆的工作簡單化
1.泛型方法
public static void Show<T>(T tParameter) { Console.WriteLine("This is {0}, parameter = {1}, type = {2}", typeof(CommonMethod).Name, tParameter.GetType(), tParameter); }
2.泛型類
public class GenericClass<T>{}
3.泛型介面
public interface GenericInterface<I>{}
4.泛型委托
public delegate void Do<T>();
5.泛型約束
public static void Show<T>(T tParameter) where T : People//基類約束 //where T : ISport//介面約束 { Console.WriteLine("This is {0}, parameter = {1}, type = {2}", typeof(CommonMethod).Name, tParameter.GetType(), tParameter); Console.WriteLine($"{tParameter.Id} {tParameter.Name}"); }
public T Get<T>(T t)
//where T : class//引用類型約束,才可以返回null //where T: struct//值類型約束 where T: new()//無參構造函數約束 { //return null; //return default(T);//default是個關鍵字,會根據T的類型去獲取一個值 return new T();//只要有無參數構造函數,都可以傳進來 //throw new Exception(); }
6.泛型緩存
/// <summary> /// 每個不同的T,都會生成一份不同的副本 /// 適合不同類型,需要緩存一份數據的場景,效率高 /// 局限:只能為某一類型緩存 /// </summary> /// <typeparam name="T"></typeparam> public class GenericCache<T> { static GenericCache() { Console.WriteLine("This is GenericCache 靜態構造函數"); _TypeTime = string.Format("{0}_{1}", typeof(T).FullName, DateTime.Now.ToString("yyyyMMddHHmmss.fff")); } private static string _TypeTime = ""; public static string GetCache() { return _TypeTime; } }
7.泛型協變(out-返回值)、逆變(in-參數)