首页 > 代码库 > 泛型1

泛型1

1. 延迟声明:把参数类型的声明,延迟到调用的时候推迟一切可以推迟的东西

2. 泛型不是语法糖,语法糖是编译器提供的功能;但是泛型是整个.net框架、CLR升级后增加的功能。

3. 普通方法在声明的时候知道参数类型;泛型方法在申明的时候不知道参数类型,用占位符的形式代替泛型方法;在编译后因为调用方指定了泛型类型,这时指定的类型替换了占位符;所以说编译后的泛型方法和普通方法是一样的,所以不会影响后面的性能运行。

4. 一个方法支持多种参数类型,性能无损耗。

5. 性能测试结果: 普通方法和泛型方法性能差不多,object方法因为要装箱拆箱,所以性能更差些。

 

普通方法:

        /// <summary>
        /// 接受int类型参数
        /// </summary>
        /// <param name="iParameter"></param>
        public static void ShowInt(int iParameter)
        {
            Console.WriteLine("This is {0}‘s ShowInt,parameter={1},value=http://www.mamicode.com/{2}",
                typeof(CommonClass), iParameter.GetType(), iParameter);
        }

        /// <summary>
        /// 接受long类型参数
        /// </summary>
        /// <param name="lParameter"></param>
        public static void ShowLong(long  lParameter)
        {
            Console.WriteLine("This is {0}‘s ShowLong,parameter={1},value=http://www.mamicode.com/{2}",
                typeof(CommonClass), lParameter.GetType(), lParameter);
        }

        /// <summary>
        /// 接受string类型参数
        /// </summary>
        /// <param name="sParameter"></param>
        public static void ShowString(string sParameter)
        {
            Console.WriteLine("This is {0}‘s ShowString,parameter={1},value=http://www.mamicode.com/{2}",
                typeof(CommonClass), sParameter.GetType(), sParameter);
        }

 

object方法

        /// <summary>
        /// 1. object类型是一切类型的父类
        /// 2. 任何父类出现的地方,都可以用子类来代替
        /// </summary>
        /// <param name="oParameter"></param>
        public static void ShowObject(object oParameter)
        {
            Console.WriteLine("This is {0}‘s ShowObject,parameter={1},value=http://www.mamicode.com/{2}",
                typeof(CommonClass), oParameter.GetType(), oParameter);
        }

 

泛型方法

 public static void Show<T>(T tParameter)//Show`1 声明方法是不知道参数类型,用占位符的形式代替泛型方法
{
    Console.WriteLine("This is {0}‘s Show<T>,parameter={1},value=http://www.mamicode.com/{2}",
         typeof(GenericClass), tParameter.GetType(), tParameter);
}

 public static void Show(int iParameter)
 {
    Console.WriteLine("在没有指定泛型方法的时候,如果参数类型能匹配普通方法,都是调用的普通方法");
 }

 

泛型方法调用

   Console.WriteLine("泛型学习");
   Console.WriteLine(typeof(List<>));
   int iParameter = 506;
   long lParameter =789;
   string sParameter = "yoyo";

   object oParameter1 = 1264891326409324;//这里赋值为Int64的类型
   object oParameter2 = new People()
   {
        Id = 550,
        Name = "DoDo"
   };

   {
         Console.WriteLine("***************************泛型方式************************");
         GenericClass.Show<object >(oParameter1);
         GenericClass.Show<object >(oParameter2);
         //GenericClass.Show<int>(lParameter);//指定类型必须和参数一致
         GenericClass.Show(lParameter);//不指定,由编译器自动推算
         GenericClass.Show(iParameter);//在没有指定泛型方法的时候,如果参数类型能匹配普通方法,都是调用的普通方法
         GenericClass.Show<int>(iParameter);
         GenericClass.Show<string >(sParameter);
         Console.WriteLine();
    }

 

泛型1