C#入门经典(第6版)阅读笔记(第三篇)(泛型)

目录#####第十二章 泛型****#####第十二章 泛型个人理解,泛型就是在创建时以改变类的类型参数和函数的类型参数来提高代码的重用度。例如:(传统的定义方式)public class SortHelper { public void BubbleSort(int [] array) { } }改用泛型://在类型名称的后面加了一个尖括号,使用这个尖括号来传递占位符,也就是类型参数。public class SortHelper<T> { public void BubbleSort(T[] array){ // 冒泡排序方法实现体 } }泛型的使用:sorter = new SortHelper<int>(); int[] array = { 8, 1, 4, 7, 3 }; sorter.BubbleSort(array);泛型的使用,此时只需要在实例化的地方动手脚就可以了。如果是其他类型的排序,此时只需要将上述代码中的int改掉即可。如果是使用传统的函数构造,就需要重写代码来进行函数功能的复用。扩展:public class SortHelper { public void BubbleSort(object [] array) { } }此处将类型变成object类型,此时它便可以接受任何类型。但是,处理值类型时,会出现装箱、折箱操作,这将在托管堆上分配和回收大量的变量,若数据量大,则性能损失非常严重。在处理引用类型时,虽然没有装箱和折箱操作,但将用到数据类型的强制转换操作,增加处理器的负担。 ######1. ?? 运算符下面两个表达式的作用是相同的>op1 ?? op2op1 == null?op2:op1######2 泛型概念  泛型是公共语言运行时和编程语言提供的一种机制,它支持另外1种形式的代码重用,也就是算法重用.  泛型包含泛型类,泛型接口,泛型委托,泛型方法,并非只包含简单的泛型类.在C#中,其他例如,属性,索引器,事件,操作符方法,构造器本身不能有类型参数T.  T(类型参数),它的目的在于指明它操作的是一个未指定的数据类型,在源代码中能够使用数据类型的地方都可以使用它.######3 为什么要使用泛型  通过使用泛型,可以极大地提高代码的重用度,同时还可以获得强类型的支持,提升了应用程序的性能,避免了隐式的装箱、拆箱,以及运行时的类型转换错误。######4 变体4.1 协变public interface IMethaneProducer<out T>{}4.2 抗变public interface IMethaneProducer<in T>{}****************************************

C#入门经典(第6版)阅读笔记(第三篇)(泛型)
公众号.png