解释 .NET 中的自定义值类型
值类型的变量直接包含值。当您将一个值类型变量赋值给另一个变量时,每个变量都关联着内存中不同的存储位置。因此,更改一个值类型变量的值不会影响第二个变量的值。
类似地,当您将值类型的实例传递给方法时,编译器会将与参数关联的内存复制到与参数关联的新位置。对参数的任何更改都不会影响原始值。由于值类型会复制内存,因此它们应该很小(通常小于 16 字节)。
所有 C# 内置类型(例如 int、bool 等)都是值类型,除了 string 和 object,它们是引用类型。您还可以使用自定义值类型创建自己的值类型。C# 中有两种自定义值类型:结构体和枚举。
结构体
结构体在语法上类似于类和接口,只是它们在类型名称之前使用关键字 struct。与类类似,结构体可以包含字段、属性、方法和构造函数。例如,名为 Point 的结构体可以定义如下。
struct Point{ public int X { get; set; } public int Y { get; set; } }
结构体中的构造函数必须初始化结构体内的所有字段和属性。这样做是为了确保值类型变量由构造函数完全初始化。未能初始化结构体内的所有数据会导致编译时错误。
所有结构体类型都派生自 System.ValueType,并且默认情况下是密封的。这意味着您不能从结构体继承。结构体类型可以实现接口。
枚举
枚举是一种值类型,您可以使用一组命名常量来声明它。要定义枚举类型,请使用 enum 关键字后跟其成员的名称。
enum Protocol{ TCP, IP, UDP }
默认情况下,枚举成员的值是整数。第一个枚举值的值为 0,每个后续条目递增 1。此外,您可以显式地将值设置为您选择的整数。
enum Protocol{ TCP = 0, IP = 50, UDP = 100 }
无法在枚举类型内定义方法。但是,使用扩展方法,您仍然可以向枚举类型添加行为。
枚举的一个重要特性是它在运行时声明了一组可能的常数值,并使代码更易于阅读。例如,您可以使用枚举替换布尔值,如下所示。
SetState(true); // vs. SetState(DeviceState.On);
广告