第二十节 泛型、partial类、枚举、结构

发布时间 2023-06-09 07:24:52作者: 不爱菠萝的菠萝君

视频链接:刘铁猛老师的《C#语言入门详解》
https://www.youtube.com/watch?v=EgIbwCnQ680&list=PLZX6sKChTg8GQxnABqxYGX2zLs4Hfa4Ca

image.png

泛型(generic)

image.png

泛型类示例

示例: 既不产生类型膨胀,也不产生成员膨胀。
image.png
image.png

泛型接口示例

示例1:一个类要实现泛型接口,那么该类必须是泛型类。
image.png
示例2:如果一个类实现了一个确定类型的泛型接口,那么这个类可以不是泛型类。
image.png
示例3:C#自定义的一些泛型类、接口:集合等。
image.png
image.png

泛型方法示例

示例:这个算法作用将2个整型数组合并成一个数组
image.png
image.png
对比:上面如果要实现double类型的合并的话,必须添加新的double类型的Zip方法,导致了方法成员膨胀。
使用泛型方法解决。
image.png

泛型委托示例 Action<>、Func<>、与Lambda表达式的配合使用

示例1:Action<>,只能去引用没有返回值的方法
image.png
image.png
示例2: Func<>,去引用有返回值类型的方法
image.png
示例3:泛型委托与Lambda表达式的配合使用
image.png
image.png

partial类

C#允许把一个类分成两部分或多部分编写,而且每个部分都可以以自己的速度进行版本更新。可以减少类的派生
这个partial类允许用不同语言写,例如:C#和XAML语言写同一个类,WPF示例。

image.png

枚举类型

示例1:
image.png
image.png
示例2:比特位用法
image.png
image.png
判断person会不会做饭
image.png

结构体

结构体是一种值类型。copy对象的时候,copy完整的对象。
结构体不能由class,struct派生而来,只能由接口派生
结构体不能创建无参的构造方法。
创建实例对象在栈上,创建的实例也存放在栈上。不像类的创建的实例(new Person();)在堆上

示例1:装箱/拆箱
image.png
image.png
示例2:不像class对象copy,而是整个对象的内存都复制了。
image.png
image.png