C#奇怪的行为

Bet*_*moo 0 c# constructor struct initialization class

我有一个自定义结构:

struct A
{
    public int y;
}
Run Code Online (Sandbox Code Playgroud)

一个带有空构造函数的自定义类:

class B
{
    public A a;
    public B()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

这是主要的:

static void Main(string[] args)
{
    B b = new B();
    b.a.y = 5;//No runtime errors!
    Console.WriteLine(b.a.y);
}
Run Code Online (Sandbox Code Playgroud)


当我运行上面的程序时,虽然我没有在B类构造函数中初始化struct A,但它并没有给我任何错误.'a = new A();'

Kon*_*lph 7

我没有在B类构造函数中初始化struct A.

C#为你做这件事.除非在声明或构造函数中为其指定其他值,否则所有类的成员都将初始化为其默认值.

对于class实例,默认值是null与使用该实例时,你会得到一个错误.然而,对于struct情况(这是不是不像类实例的引用),不存在一个null值.a的默认值struct是其所有字段都已默认初始化的实例.

这就是你的代码有效的原因.