太空铝阳台洗衣柜 发表于 2024-5-23 10:50:36

C#.Net筑基-类型系统②常见类型


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//常量类型,可以修改为其他整数类型
{
   
        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 类型还可以作为泛型约束使用。
<strong>
来源:https://www.cnblogs.com/anding/p/18176136
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: C#.Net筑基-类型系统②常见类型