泛型

泛型编程优势解析

泛型的优点

1.性能

泛型类在编译器中生成T类型的类,不会进行装箱和拆箱。
/*
对值类型使用非泛型集合类时,把值类型转换为引用类型,和把引用类型转换为值类型时,需要进行装箱和拆箱操作。
装箱和拆箱操作性能损失较大。
*/
ArrayList list = new ArrayList();
list.Add(1);    //add方法的参数是object,装箱
list.Add("1");
int a = (int)list[0];    //注意这里需要强制转换 - 拆箱

 

2.类型安全

 泛型类List<T>中,泛型类型 T 定义了允许使用的类型。

 

3.二进制代码的重用

泛型类定义一次,可以使用不同的类型实例化。

 

4.代码的扩展

值类型使用泛型类,编译器会为每个值类型生成一个新类,因为值类型对内存大小的要求不同。

引用类型使用泛型类,共享一个本地类的所有代码,因为引用类型在实例化的泛型类中只需4个字节,就可以引用一个实例。

 

创建泛型类

泛型类的定义和一般类相同,只是要使用类型T做泛型类型的声明。

 

泛型类的功能

1.默认值 default

创建泛型类时,内部对泛型类型 T 的初始化。

T t = default(T); //default 关键字,将null赋予应用类型,0赋予值类型

  

2.约束

创建泛型类时,对泛型类型 T 的要求。

class MyClass<T> where T : IDisposable, new()  //可以有多个约束
{
 
}
泛型约束
约束说明
where T : strust  类型T必须是值类型
where T : class类型T必须是引用类型
where T : IFoo  类型T必须实现IFoo接口
where T : Foo类型T必须是Foo的派生类
where T : new()类型T必须有一个默认构造函数
where T1 : T2泛型类中有多个泛型类型,其中类型T1是类型T2的派生类  

 

 

 

 

 

 

 

 

3.继承

泛型类和类一样,可以继承和被继承。方法可以是抽象的,虚拟的。

 

 4.静态成员

1.泛型类型的静态成员比较特殊。因为编译器会为值类型的泛型类创建一个新类,所以,泛型类中的静态成员并不能共享。

 

泛型接口

泛型接口的定义和一般接口相同,只是要使用类型T做泛型类型的声明。

泛型接口常常存在一个较老的非泛型版本,以后要进来使用泛型版本,因为可以避免拆装箱。

 泛型接口的协变与逆变(不懂)

 

泛型结构(可空类型)

Nullable<T> 就是 int? 可空类型

 

泛型方法

1.普通泛型方法

public void Func<T>(T t) where T : class
{
    
}

2.带委托的泛型方法

public void Func<T>(Action<T> action) where T : class
{
 
}

  

转载于:https://www.cnblogs.com/lztwj/p/7224935.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值