【问题标题】:C# Strange BehaviorC# 奇怪的行为
【发布时间】:2010-05-08 09:02:34
【问题描述】:

我有一个自定义结构:

struct A
{
    public int y;
}

具有空构造函数的自定义类:

class B
{
    public A a;
    public B()
    {
    }
}

这里是主要的:

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


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

【问题讨论】:

  • 我对这个问题感到困惑。为什么会出现 runtime 错误?我可以理解为什么您会期望出现 compile-time 错误,但为什么会出现 runtime 错误呢?我怀疑您认为运行时错误在这里是合适的,这是对“值类型”含义的深刻误解的症状。你能解释一下为什么你认为这应该是一个运行时,而不是编译时错误吗?如果字段“a”的类型是“double”而不是结构 A,您是否同样会期望出现运行时错误?为什么或为什么不?

标签: c# class constructor struct initialization


【解决方案1】:

我没有在 B 类构造函数中初始化结构 A。

C# 会为您做到这一点。类的所有成员都被初始化为其默认值,除非您在其声明或构造函数中为它们分配其他值。

对于class 实例,默认值为null,使用该实例时会出现错误。但是,对于 struct 实例(与类实例不同,它是 not 引用),不存在 null 值。 struct 的默认值是其所有字段都已默认初始化的实例。

这就是您的代码有效的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2019-04-10
    • 2019-05-24
    • 2016-07-15
    • 2011-06-23
    • 2016-08-12
    • 2013-10-28
    • 2016-05-03
    相关资源
    最近更新 更多