ToB企服应用市场:ToB评测及商务社交产业平台

标题: 泛型的学习 [打印本页]

作者: 熊熊出没    时间: 2023-4-4 14:09
标题: 泛型的学习
泛型的学习

一、泛型的引入

传统方法
  1.    public static   class CommonMethod
  2.     {
  3.         public static void ShowInt(int Parameter)
  4.         {
  5.             Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} ");
  6.         }
  7.         public static void ShowString(string Parameter)
  8.         {
  9.             Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} ");
  10.         }
  11.         public static void ShowDateTime(DateTime Parameter)
  12.         {
  13.             Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} ");
  14.         }     
  15.     }
复制代码
使用Object类型
  1.    public static   class CommonMethod
  2.     {
  3.         public static void ShowObject(object Parameter)
  4.         {
  5.             Console.WriteLine($"This is {typeof(CommonMethod).Name} parameter={Parameter},type={Parameter.GetType().Name} ");
  6.         }
  7.     }
复制代码
我们通过一个例子来体现性能的问题
  1. public  class PerformanceTest
  2.     {
  3.         public static void Show()
  4.         {
  5.             int ivalue = 1234;
  6.             //消耗的时间
  7.             long commonSecond = 0;
  8.             long objectSecond = 0;
  9.             long genericSecond = 0;
  10.             {
  11.                 Stopwatch sw = new Stopwatch();
  12.                 sw.Start();
  13.                 for (int i = 0; i < 1000_000_000; i++) {
  14.                     ShowInt(ivalue);
  15.                 }
  16.                sw.Stop();
  17.                 commonSecond = sw.ElapsedMilliseconds;
  18.             }
  19.             {
  20.                 Stopwatch sw = new Stopwatch();
  21.                 sw.Start();
  22.                 for (int i = 0; i < 1000_000_000; i++)
  23.                 {
  24.                     ShowObject(ivalue);
  25.                 }
  26.                 sw.Stop();
  27.                 objectSecond = sw.ElapsedMilliseconds;
  28.             }
  29.             {
  30.                 Stopwatch sw = new Stopwatch();
  31.                 sw.Start();
  32.                 for (int i = 0; i < 1000_000_000; i++)
  33.                 {
  34.                     Show(ivalue);
  35.                 }
  36.                 sw.Stop();
  37.                 genericSecond = sw.ElapsedMilliseconds;
  38.             }
  39.             Console.WriteLine($"commonSecond: {commonSecond} objectSecond: {objectSecond} genericSecond :{genericSecond} ");
  40.         }
  41.         
  42.         private static void ShowInt(int r)
  43.         {
  44.         }
  45.         private static void ShowObject(object o)
  46.         {
  47.         }
  48.          private static void Show<T>(T parameter)
  49.         {
  50.         }
  51.     }
复制代码
结果为:

二、泛型的声明

1.泛型方法:在方法名称后面多一对尖括号,尖括号中有占位符
2.延迟声明:声明的时候,只是给一个占位符T,T是什么类型?不知道什么类型---调用的时候,指定你是什么,调用的时候,你说什么就是什么;
3.占位符: T ---类型参数 --- 类型变量
4.类型参数当作方法的参数的时候,明确参数类型。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4