泛型的学习
2023-03-24 14:11:11
博客园 2023-03-24 14:11:11
(资料图)
传统方法
public static class CommonMethod { public static void ShowInt(int Parameter) { Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} "); } public static void ShowString(string Parameter) { Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} "); } public static void ShowDateTime(DateTime Parameter) { Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} "); } }
使用Object类型
public static class CommonMethod { public static void ShowObject(object Parameter) { Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} "); } }
我们通过一个例子来体现性能的问题
public class PerformanceTest { public static void Show() { int ivalue = 1234; //消耗的时间 long commonSecond = 0; long objectSecond = 0; long genericSecond = 0; { Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 1000_000_000; i++) { ShowInt(ivalue); } sw.Stop(); commonSecond = sw.ElapsedMilliseconds; } { Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 1000_000_000; i++) { ShowObject(ivalue); } sw.Stop(); objectSecond = sw.ElapsedMilliseconds; } { Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 1000_000_000; i++) { Show(ivalue); } sw.Stop(); genericSecond = sw.ElapsedMilliseconds; } Console.WriteLine($"commonSecond: {commonSecond} objectSecond: {objectSecond} genericSecond :{genericSecond} "); } private static void ShowInt(int r) { } private static void ShowObject(object o) { } private static void Show(T parameter) { } }
结果为:
1.泛型方法:在方法名称后面多一对尖括号,尖括号中有占位符2.延迟声明:声明的时候,只是给一个占位符T,T是什么类型?不知道什么类型---调用的时候,指定你是什么,调用的时候,你说什么就是什么;3.占位符: T ---类型参数 --- 类型变量4.类型参数当作方法的参数的时候,明确参数类型。