C# 中的结构(struct)是一种值类型,它具有以下特性:
值类型:结构是值类型,这意味着当将结构赋值给另一个变量时,会创建一个新的副本。这与引用类型(如类)不同,引用类型的赋值操作只会复制引用,而不是对象本身。
继承自 System.ValueType
:结构默认继承自 System.ValueType
,这意味着它们具有一些内置的方法,如 Equals()
、GetHashCode()
和 ToString()
。
可空性:结构可以具有可空性(nullable),这意味着它们可以表示值的范围之外的值。要声明一个可空的结构,可以使用 ?
符号,例如 int?
。
默认构造函数:结构具有默认构造函数,即使没有显式定义,它也会自动创建一个包含所有成员变量的默认值的实例。
参数传递:结构作为参数传递给方法时,会按值传递。这意味着在方法内部对结构进行修改不会影响到原始变量。如果需要在方法内部修改原始结构,可以使用 ref
或 out
关键字。
结构体实例化:结构体实例化时,会自动调用默认构造函数创建一个包含所有成员变量默认值的实例。可以通过指定参数值显式初始化结构体,例如 MyStruct myStruct = new MyStruct(value1, value2);
。
装箱和拆箱:结构可以自动装箱(将值类型转换为引用类型)和拆箱(将引用类型转换为值类型)。例如,可以将结构赋值给一个整型变量,也可以将整型变量赋值给结构变量。
内存分配:结构通常分配在栈上,而不是堆上。这意味着它们的内存分配和回收速度较快,但生命周期受限于它们所在的作用域。