泛型

1.编程思想

   延迟声明:把参数类型的声明推迟到调用。这不是语法糖,而是由框架升级提供的功能。

   由此延伸出来的一个架构设计的思想:推迟一切可以推迟的东西。

2.语言转换

    高级语言=》中间语言(IL)=>运行时,即时编译器(GIT)将中间语言转为二进制机器码。

3.泛型的性能问题

   泛型不会影响性能。因为1.泛型不会产生装箱拆箱的问题。2.泛型是在二进制机器码执行器在git里面进行类型解析替换的,将泛型方法转为普通方法了。所以泛型方法性能=普通方法》object类型参数的方法。

4.泛型方法使用时可以不传入类型,编译器可以自动推断。

5.应用场景:为了代码的复用。不用每个类型都写一遍。通用方法一般都用泛型。泛型既可以做参数也可以做返回值。泛型一切目标都是为了解决相同逻辑不同类型的问题。提高代码复用、提高效率。

6.泛型类、泛型方法、泛型接口、泛型委托。

7.拓展:子类构造方法默认调用父类的构造无参构造方法。除非制定以下:base("")。

8.泛型约束:

  可以是多重的(并的关系)、复合的。父类约束只能一个,接口约束可以多个。因为c#中只能单继承但是可以多实现。

   8.1加了基类泛型约束,其实也是相当于给T指定了类型,在泛型方法内可以直接使用积累的属性和方法。比如 where T:People 表示T一定是People的子类,比如People有 Name Age的属性,就可以通过T的实例直接进行调用了。

   8.2接口泛型约束:泛型类型必须实现该接口

   8.3无参构造约束: Where t:new() 泛型必须具有一个无参构造函数

   8.4引用类型约束:Where T:class

   8.5值类型约束:Where T:struct

9.拓展关键字  default(T)  返回一个类型对应的默认值。如果是int 则返回0 如果是bool 则返回false。

原文地址:https://www.cnblogs.com/chenxizhaolu/p/6896398.html