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