C#高级开发之泛型一

1、泛型

     C#中的泛型引入了延迟申明(延迟申明思想),把参数类型的申明推迟到调用,在编译(第一次编译)时先生成中间代码IL公共中间语言(CIL),通用类型T只是一个占位符。在实例化类时,根据用户指定的数据类型代替T并由即时编译器(JIT)生成本地托管代码(.net框架编译器编写的代码,需要在CLR的环境下运行),这个本地托管代码中已经使用了实际的数据类型,等同于用实际类型写的类,然后在CLR(公共语言运行库)中再次有JIT即时编译器转换机器代码(二进制)。泛型不是语法堂,而是由.net2.0框架升级而来需要编译器支持+JIT支持等支持。

占位符(`)2为参数个数
 一 泛型方法、泛型类、泛型接口、泛型委托
1、泛型方法: 泛型方法解决用一个方法,满足不同参数类型;做相同事,没有写死参数类型,调用的时候才指定类型,泛型方法声明示例,以下是一个参数的方法声明
public static void Show<T,S>(T tParameter)
        {
            Console.WriteLine("This is {0},parameter={1},type={2}",
                typeof(GenericMethod), tParameter.GetType().Name, tParameter.ToString());
         }

2、泛型类:一个类来满足不同的具体类型,做相同事。泛型类声明示例,

public class GenericClass<T>
    {
        public T _T;//泛型类中声明一个类型
    }

3、泛型接口:一个接口来满足不同的具体类型做相同事,泛型接口声明示例,

 public interface IGenericInterface<T> //where T : People
    {
        T GetT(T t);//泛型类型的返回值(接口中的泛型方法)
    } 

4、泛型委托,一个委托满足不同的具体类型做相同事,泛型委托声明示例,

public delegate void SayHi<T>(T t);//泛型委托

二,泛型约束 泛型基类约束(不能是sealed),泛型接口约束,泛型引用类型约束,值类型约束,无参数构造约束。泛型约束权力与义务:可以使用基类的一切属性方法(权利) 强制保证T一定是People或者People的子类(义务)示例如下

 1 public static T Get<T>(T t)
 2             where T:People//基类约束
 3             //where T : ISports//接口约束
 4             //where T : class//引用类型约束
 5             //where T : struct//值类型约束
 6             //where T : new()//无参数构造函数约束
 7         {
 8             t.Hi();
 9             //t.Pingpang();
10             //T tNew = null;
11             //T tNew = default(T);//会根据T的不同  赋予默认值
12             return t;
13         }
View Code

 

 

posted @ 2019-01-21 18:38  youzhangcai  阅读(186)  评论(0编辑  收藏  举报