• 1.泛型


    1.概念:泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实现。这意味着使用泛型的类型参数T,写一个类MyList<T>,客户代码可以这样调用:MyList<int>, MyList<string>或 MyList<MyClass>。这避免了运行时类型转换或装箱操作的代价和风险。

    2.泛型方法解决用一个方法,满足不同参数类型,做相同的事

    3.延迟声明,把参数类型的声明推迟到调用

    4.

            public static void Show<T>(T tParameter)
            {
    
            }
    
            public static void ShowObject(object oParameter)
            {
    
            }    

    泛型与直接传object的区别:object是引用类型,传入值类型会进行装箱操作,消耗性能

    5.泛型约束:

    class MyList<T> 
        where T: Employee, IEmployee,  IComparable<T>,  new()
    {
         ...      
    }
        下表列出了五类约束:
    约束
    描述
    where T: struct
    类型参数必须为值类型。
    where T : class
    类型参数必须为类型。
    where T : new()
    类型参数必须有一个公有、无参的构造函数。当于其它约束联合使用时,new()约束必须放在最后。
    where T : <base class name>
    类型参数必须是指定的基类型或是派生自指定的基类型。
    where T : <interface name>
    类型参数必须是指定的接口或是指定接口的实现。可以指定多个接口约束。接口约束也可以是泛型的。

    6.泛型代码中的default关键字

            public static T GetT<T>(T t)
            {
                return default(T);
            }

    会根据T的类型不同赋予默认值,它对引用类型返回空,对值类型的数值型返回零。

    7.WebService WCF都不能用泛型

    跨语言的,其他语言可能不支持泛型

    服务在发布的时候必须是确定的,泛型在编译时确定不了

    了解

    1.泛型的斜变out、逆变in;

    2.泛型缓存=>每个不同的T都会生成不同的副本

  • 相关阅读:
    SQL SERVER 将表字段值0和1互转的几种方法
    JS 解决 IOS 中拍照图片预览旋转 90度 BUG
    Js利用Canvas实现图片压缩
    IIS 下调用证书出现异常解决方案 (C#)
    C# 如何防止重放攻击
    RSA,JAVA私钥加密,C#公钥解密
    C# 字符串按 ASCII码 排序,注意其中的小坑
    C# dynamic类型报错:“object”不包含“xxx”的定义
    Angularjs 实现移动端在线测评效果
    C# 利用VS自带的WSDL工具生成WebService服务类
  • 原文地址:https://www.cnblogs.com/bjhblogs/p/12633669.html
Copyright © 2020-2023  润新知