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

摘要:
泛型1.概述2.创建泛型类3.泛型类的特性4.泛型接口5.泛型结构6.泛型方法1.概述泛型由CLR定义,因此。net支持的语言支持泛型。System.Collections。Generic命名空间中的List<T>类与ArrayList(2)类型安全(3)二进制代码的重用(4)代码扩展(5)命名约定命名规则进行比较:● 泛型类型的名称以字母T为前缀。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:

 .net系统自学笔记——泛型第1张

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

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

3.继承:

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

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

四、泛型接口

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

1.协变和抗变

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

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

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

五、泛型结构:

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

可空类型

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

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

六、泛型方法:

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

带约束的泛型方法

带委托的泛型方法

泛型方法规范

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

免责声明:文章转载自《.net系统自学笔记——泛型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇最新版本容器编排工具rancher-v2.3.3的HA高可用部署执行一个外部程序并等待他的结束下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

接口测试-自动化-Java-思路

这次模拟学习的思路是这样的: 目的: 为了能测试接口是否运行正常, 因为公司目前人员流动比较大,之前的后台接口开发人员已经离职,目前线上接口已经运行, 再出现新需求的情况下,如果没有开发新的接口,不确定是否会因为同步代码等其他问题造成接口不可用。 如果没有太多的时间测试每个接口是否正常,可以使用自动化脚本进行测试,保证每个接口运行正常。 注:当然接口测试还...

jmeter单一接口测试

在使用jmeter进行单一接口测试之前,我们先来了解一下一个用户请求的过程,如下: 1)用户通过浏览器发起一个请求; 2)用户收到服务器返回的响应数据。 如上,就是一个WEB的请求/响应模型 jmeter要测试WEB接口,那么它就得模拟这个请求响应模型,得有下几个元素: 1)用户(或者称之为线程); 2)请求发送; 3)响应接收。 下面,我们根据以上几个元...

发现TypeScript中同名interface接口会自动合并的特性

今天在学习怎么用TypeScript给jQuery写扩展插件时发现一个很有趣的事情 如上图,VS提示我应该在类C中实现b。 我可以同时定义一个重名的接口,而这个接口内容会自动合并。 这再C#中是绝对不允许的,除非在不同的命名空间中。 但如果我在重名接口中定义相同名称的属性会报重名错误。 也就说并不是js中的后定义的覆盖先前定义的内容。 虽然这些接口信息...

黑马程序员——JAVA学习笔记八(集合)

1,    JAVA最初版本只为最常用的数据结构提供了很少的一组类:Vector、Stack、Hashtable、BitSet与Enumeration接口,从JAVA1.2版本开始推出了一组功能完善的的数据结构。 集合类的由来:  对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。  就使用集合容器进行存储。 集合特点: 1,用于存储对象的容器...

C++中的函数指针模板

所谓函数指针模板,就是指向函数模板的函数指针,也可以称为泛型函数指针。 问题描述:定义了一类函数模板,而且这类函数模板有共同的接口,即一致的参数列表。那么如何定义一个函数指针,使这个函数指针可以指向这一类中的所有函数模板呢? 一、先我们应当明确一点,在C++中,模板函数仅仅是一个用来生成函数的代码块,它本身是没有实体的,也就没有与“未被实例化的那些代码”...

ArcGIS Engine栅格数据使用总结

jojojojo2002 原文 ArcGIS Engine栅格数据使用总结 简介:ArcGIS Engine栅格数据使用总结,一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据...