|
01、结构体类型Struct
结构体 struct 是一种用户自定义的值类型,常用于定义一些简单(轻量)的数据结构。对于一些局部使用的数据结构,优先使用结构体,效率要高很多。
- 可以有构造函数,也可以没有。因此初始化时可以new,也可以用默认default。但当给字段设置了初始值时,则必须有显示的构造函数。
- 结构体中可以定义字段、属性、方法,不能使用终结器。
- 结构体可继承接口,并实现接口,但不能继承其他类、结构体。
- 结构体是值类型,被分配在栈上面,因此在参数传递时为值传递。
⁉️结构体始终都是分配在栈上吗?—— 不一定,当结构体是类的成员时,则会随对象一起分配在堆上。同时当结构体上有引用类型字段时,该字段只存储引用对象的地址,引用对象还是分配在堆上。
- void Main()
- {
- Point p1 = default;
- //Point p1 = default(Point);
- Point p2 = new Point(1, 2);
- p1.X = 100;
- p2.X = 100;
- }
- public struct Point
- {
- public int X;
- public int Y;
- public Point(int x, int y)
- {
- X = x;
- Y = y;
- }
- }
复制代码 1.1、只读结构体与只读函数
readonly struct申明一个只读的结构体,其所有字段、属性都必须是只读的。- public readonly struct Point
- {
- public readonly int X,Y;
- }
复制代码 用在方法上,该方法中不可修改任何字段值。这只能用在结构体中,结构体不能继承,不知道这个特性有什么用?- public struct Point
- {
- public int X;
- public int Y;
- public readonly int GetValue()
- {
- X--; //Error:不可修改
- return X + Y;
- }
- }
复制代码 1.2、Ref 结构体
ref 结构类型 用ref struct申明,该结构体只能存储在栈上,因此任何会导致其分配到堆上的行为都不支持,如装箱、拆箱,作为类的成员等都不支持。
Ref 结构体 可用于一些高性能场景,System.Span、ReadOnlySpan 都是 readonly ref struct结构体。- public ref struct Point
- {
- public int X,Y;
- }
复制代码 02、枚举Enum
枚举类型 是由基础值类型(byte、int、long等)组成的一组命名常量的值类型,用enum来申明定义。常用于一些有固定值的类别申明,如性别、方向、数据类型等。
- 枚举成员默认是int,可以修改为其他整数类型,如byte、short、uint、long等。
- 枚举项可设置值,也可省略,或者部分设置值。值默认是从0开始,并按顺序依次递增。
- 枚举变量的默认值始终是0。
- 枚举本质上就是命名常量,因此可以与值类型进行相互转换(强制转换)。
- 特性Description常用来定义枚项在UI上的显示内容,使用反射获取。
- public enum UserType : int //常量类型,可以修改为其他整数类型
- {
- [Description("普通会员")]
- Default,
- VIP = 10,
- SupperVIP, //继续前一个,值为11
- }
- void Main()
- {
- var t1 = UserType.Default;
- Console.WriteLine(t1.ToString()); //输出名称:Default
- Console.WriteLine((int)t1); //输出值:0
- Console.WriteLine($"{t1:F}"); //输出名称:Default
- Console.WriteLine($"{t1:D}"); //输出值:0
- var t2 = (UserType)0;
- int t3 = (int)UserType.Default;
- Console.WriteLine(t1 == t2); //True
- }
复制代码 2.1、Enum 类API
System.Enum 类型是所有枚举类型的抽象基类,提供了一些API方法用于枚举的操作,基本都是静态方法。Enum 类型还可以作为泛型约束使用。
[table][tr]<strong>
来源:https://www.cnblogs.com/anding/p/18176136
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|