• .net系统自学笔记——泛型


    泛型

    1.概述

    2.创建泛型类

    3.泛型类的特点

    4.泛型接口

    5.泛型结构

    6.泛型方法

    一、概述

    泛型是CLR定义的,所以支持.net的语言就支持泛型。

    优缺点:

    1.性能

    2.类型安全

    3.二制代码重用

    4.代码的扩展

    5.命名约定

    (一)、性能

    名词:装箱,拆箱。(性能损失)

    System.Collections.Generic名称空间中的List<T>类,对比ArrayList

    (二)类型安全

    (三)二进制代码的重用

    (四)代码的扩展

    (五)命名约定
    命名规则:

    ●   泛型类型的 名称用字母 T作 为前缀。

    ●   如果没有特殊的要求,泛 型类型允许用任意类替代,且只使 用 了 一个泛型类型,就可以 用字符 T作 为泛型类型的 名称。

    ●   如果泛型类型有特定的 要求(例 如,它必须实现一个接 口 或派生基类),或者使用了 两个或多个泛型类型,就应给泛型类型使用描述性的名称

    二、创建泛型类:即类似List<T>的类。需要创建的是“List”

    泛型类 的定义与一般类类似 ,只 是要使用泛型类型声明。

    之后 ,泛型类型就可 以在类 中用作一个字段成员,或者方法 的参数类型 。

    三、泛型类的功能:

    在创建泛型类时,还需要一些其他C#关键字,例如,不能把null赋予泛型类型。此时,可以使用default关键字。如果泛型类型不需要object类的功能 ,便需要调用泛型类上的某些特定方法,就可以定义约束。

    包括:默认值,约束,继承,静态成员。

    1.默认值:default

    2.约束:where:

     

    只能为默认构造函数定义构造函数约束,不能为其他构造函数定义构造函数约束。

    使用泛型类型还可以合并多个约束

    3.继承:

    泛型类型可以实现泛型接口,也可以派生自一个类。泛型类可以派生自泛型基类,要求是必须重复接口的泛型类型,或者必须指定基类的类型。于是,派生类可以 是泛型类或非泛型类。 例如,可 以 定义一个抽象的 泛型基类,它在派生类中用一个具体的 类型实现。 这允许对特定类型执行特殊的 操作。

    4.静态成员:泛型类的静态成员需要特别关注。泛型类的静态成员只能在类的一个实例中共享。

    四、泛型接口

    使用泛型可以定义接口,在接口中定义的方法可以带泛型参数。.net为不同的情况提供了许多接口。同一个接口常常存在比较老的非泛型版本。

    1.协变和抗变

    在.net之 前,泛 型接口 是不变的。 .NET4通过协变和抗变为泛型接口和泛型委托添加了一个 重要的扩展。 协变和抗变指对参数和返回 值的 类型进行转换。

    2.泛型接口的协变:如果泛型类型用out关键字标,泛型接口就是协变的。这也意味着返回类型只能是T。

    3.泛型接口的抗变:如果泛型类型用in关键字标注,泛型接口就是抗变的。这样,接口只能把泛型类型 T用作其方法的 输入.

    五、泛型结构:

    与类相似,结构也可以是泛型的,类似于泛型类,只是没有继承特性。

    可空类型

    泛型结构示例:Nullable<T>,int?  a=null;(正常情况下值类型是不允许为null的)

    非可空类型可以 转换为可空类型。 从非可空类型转换为可空 类型时,在 不需要强制类型转换的地方可以 进行隐式转换。但从可空类型转换为非可空 类型可能会失败。 如果可空类型的 值是 null,并 且把null值赋予非可空类型,就会抛出InvalidOperationException类型的异常。如果不进行显式类型转换,还 可以 使 用合并 运算符(coalescing operator)从 可空类型转换为非可空类型。 合并运算符的 语法是"??", 为转换定义了 一个默认值,以 防可空类型的值是 null;

    六、泛型方法:

    除了定义泛型类之外,还可以定义泛型方法,在泛型方法中,泛型类型用方法声明来定义 。泛型方法可以在非泛型类中定义。

    带约束的泛型方法

    带委托的泛型方法

    泛型方法规范

    ————未深入理解,待续

  • 相关阅读:
    HTML from表单的name属性
    Vue基础语法数据绑定、事件处理和扩展组件
    Vue 系列 之 Vue1.x
    SQLServer XML类型
    基于gitlab + jenkins + harbor + k8s 搭建部署微服务环境
    NuGet微软官方中国国内镜像
    4层架构六边型架构(也就是洋葱架构)
    锁优化建议
    一款开源的跨平台实时web应用框架——DotNetify
    使用 .NET 升级助手将NET Core 3.1项目升级为.NET 6
  • 原文地址:https://www.cnblogs.com/gdx4430090/p/3165032.html
Copyright © 2020-2023  润新知