欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#中泛型

程序员文章站 2022-07-16 23:50:00
整理一下昨天学习的泛型,有不对的地方欢迎指正: 定义一个类,这个类中某些字段的类型不确定,这些类型可以在构造类时确定下来 2.泛型方法 泛型方法就是定义一个方法,这个方法的参数类型可以是不确定的,当调用这个方法时再去确定这个方法参数的类型。 T作为类型参数也是一个占位符在泛型中,例: 3.泛型解析: ......

整理一下昨天学习的泛型,有不对的地方欢迎指正:

  1. 泛型类

定义一个类,这个类中某些字段的类型不确定,这些类型可以在构造类时确定下来

 c#中泛型

 

c#中泛型

 

 

 

    2.泛型方法

泛型方法就是定义一个方法,这个方法的参数类型可以是不确定的,当调用这个方法时再去确定这个方法参数的类型。

c#中泛型

 

 

 

t作为类型参数也是一个占位符在泛型中,例:

c#中泛型

 

 

 c#中泛型

 

 

 

       3.泛型解析:

c#中泛型

 

 

 c#中泛型

 

 

 在编译器解析泛型的时候会用占位符去表达有几个类型参数比如~1是1个类型参数t,~2是两个类型参数tkey,tvalue,在clr解析运行的时候具体参数类型已经确定,会把占位符替换成具体参数类型

     4.泛型与object:

c#中泛型

 

 

 由其他值类型到object,系统会自动装箱,拆箱操作,需要操作堆和栈会对系统性能产生影响,若处理引用类型,必须要进行类型强制转化,也会产生一定的影响,有可能因为类型的强制转化出现错误。

泛型方法效率最高>普通方法>object方法

     5.泛型约束:

定义泛型类时,作为对类型参数的几种类型施加限制,如果尝试使用约束不允许的类型实例化类,则会产生编译时错误,这些限制成为约束.通过where上下文关键字指定约束。

c#中泛型

 

 

 where t:类:基类不是是密封的,密封类不能被继承,加约束毫无意义

where t:new()(类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。)

注意:有多个泛型约束时,new()约束一定是在最后,泛型类型不能继承多个基类可以继承多个接口。

基类约束:

c#中泛型

 

 

 引用类型约束:

c#中泛型

 

 

 值类型约束:

c#中泛型

new()约束:

c#中泛型

多个泛型约束:

public static void show<t>(t tparameter)

            where t : people, isports, iwork, new()

{

    

}

   6.泛型缓存:

类中的静态类型无论实例化多少次,在内存中只会有一个,静态构造函数只会执行一次,在泛型类中,t类型不同,每个不同的t类型,都会产生一个不同的副本,所以会产生不同的静态属性,不同的静态构造函数

注意:只能为不同的类型缓存一次.泛型缓存比字典缓存效率高。泛型缓存不能主动释放。