泛型的应用场景
我们有一个Box类和好几个商品的种类,每个商品又都有自己的独特属性(颜色,作者,产地)之类的。我想用这个Box装所有货物怎么办捏
想到的方法是用Object这个类,但是呢得到货物的属性就格外困难。
Apple apple = new Apple(){Color = "Red"};
Book book = new Book(){Name = "New Book"};
Box box1 = new Box(){Cargo = apple};
Box box2 = new Box(){Cargo = book};
Console.WriteLine((box1.Cargo as Apple)?.color);
放东西简单,拿出来就不好使了
接下来泛型登场!!!!!!!!
所有泛型实体都不能直接拿来编程,想要编程要先实现特化
Box<Apple>当中一定是类名,因为他是一个类型参数,不可能是一个变量名。这样呢我们输入Cargo.之后就能直接看到Color已经出现了,这样就消除了成员膨胀,也方便读取
泛型接口
哎呀,接口不也可以实现类似功能嘛。好的,泛型接口来了
学生类有了个泛型接口,自己也变成了泛型类捏。假如学生太多啦!int都不够用啦!那简单,
Student<ulong> stu = new Student<ulong>();
stu.ID = 1000001;
在这里我们也可以直接实现特化之后的接口,这样Student也不是泛型类了,ID直接就是ulong类型
C#中自带的泛型接口有很多,IDictionary就是其中之一(要using System.Collections.Generic),这里分别用int 和 string特化TKey和TValue
泛型委托
使用Action泛型委托来直接调用(只能引用没有返回值的方法)
接下来是Func泛型委托
前两个int代表着参数类型,后一个int是返回值类型
如果方法只在这里出现,那么就是用lambda表达式
其实a和b前面的double也可以去掉
partial类
简而言之就是一个类由于各种原因,想添加一些方法,但又不想改变原来的类,那就用partial。
他居然还能不同的部分用不同的编程语言书写 !🐂!(保证命名空间一致哦
枚举
枚举是unity中的FSM的常客,主要作用是规范属性,如果用字符串类型,多人协作总有笨b乱写。
他有个好玩的点,枚举中每个值都有个对应的int值
他们依次是100,101,102,103。不给emploee赋值的话就是0,1,2,3(看见没这里就没分大小写,所以枚举好啊)
这就有个绝妙的方法,枚举只能让我选一个,但如果要有技能这样能增删的功能咋办。这时候我们分别给他们赋值为1,2,4,8也就是2进制。
这时候打印出person.Skill的话将会是15,然后用图中的用法就能知道我们会不会Cook
(魔兽世界的拼接地图就是这种用法,除开游戏,文件的打开方式也可以采用这个方法)
再写点结构体相关的
来个经典时尚结构体
首先结构体不能继承自其他结构体,但接口彳亍
然后呢不能有显式的无参构造器
这是无参 这是有参
有了构造器,这么写
没有构造器的话,你就只能像下面这么写
这是个经典面试题,这不是引用而是copy
所以stu2是1001,stu1不变