下面是简单的C#struct示例。
public struct MyStruct
{
public int a;
public void Foo()
{
//Do something
}
}
public class Test
{
Mystruct st;
void DoSomething()
{
st.Foo();
}
}
我知道如果我们使用没有new的struct实例,必须在使用前初始化成员字段。但上面的例子没有任何错误。为什么呢?
答案 0 :(得分:3)
这与struct
无关。
在C#中,必须先初始化每个(本地)变量(赋值),然后才能使用它。
在创建类的实例时,类的字段被初始化为其默认值,因此您不必在构造函数中显式指定值。
答案 1 :(得分:0)
它与类和结构之间的区别有关。结构是一种值类型。这意味着,只要您声明它,就会为该结构分配内存。因此,在您的情况下,当创建Test实例时,MyStruct.a所需的内存将在Test实例的内存中分配。
只有在创建实例(新)时才会分配类实例的内存(引用类型)。因此,在创建之前,您无法访问任何成员(字段或方法或...)。 从理论上讲,结构和类的代码应该是可用的,但对于代码需要来自实例的信息以调用方法的类,例如找出实际调用的(虚拟)方法。
它还与分配和初始化变量之间的区别有关。当您为变量分配内存时,即使您可能不知道内容是什么,也可以使用该变量。当您初始化变量时,您实际上知道内容是什么,因此您可以使用它并获得可预测的结果。 对某些变量自动初始化变量,您需要自己为其他变量(例如局部变量)执行此操作。我不知道这个的原因,但只是接受它;)如果你没有初始化一个应该初始化的变量,编译器会帮助你解决构建错误。
我希望这对你有帮助。