zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    程序员为什么难管理?
    Python多继承
    如何从程序员走向管理层?
    为什么Python能超越JAVA,有什么优势?
    HTTP协议简介与在python中的使用详解
    人力资源管理书籍推荐,这本书HR必看
    把市面上的书翻了个遍,找到这五本经典营销管理书籍推荐给大家
    服务器部署之 cap deploy:setup
    【转】D3DXLoadSkinMeshFromXof函数及.x在不同dx版本中
    【转】C/C++字节对齐算法
  • 原文地址:https://www.cnblogs.com/youzhangcai1/p/10300342.html
Copyright © 2011-2022 走看看