以下 C# 代码无法编译。
public class BaseType
{
public BaseType(int bar)
{
// Do stuff with bar...
}
}
public class DerivedType : BaseType
{
private int foo;
public DerivedType() : base(foo = 0) {}
}
调用 DerivedType 的基本构造函数时会发生错误,并显示消息“无法在静态上下文中访问非静态字段 'foo'”。这个错误信息告诉我什么? 'foo' 不是静态的,类也不是静态的,而且这些也不是静态构造函数。
此时base(foo = 0)
执行DerivedType
类尚未“创建”,因此它还无法访问它定义的成员。
事情发生的顺序是这样的
- 用户调用
new DerivedType()
- 称为派生类型的代码
base(foo = 0)
- 代码调用了BaseType的隐式
base()
to Object()
- 任何字段的内存
Object
被分配,然后Object()
构造函数运行完成。
- 任何字段的内存
BaseType
被分配,然后BaseType(int bar)
构造函数运行完成。
- 任何字段的内存
DerivedType
被分配,然后DerivedType()
构造函数运行完成。
所以你看到你正在尝试分配一个值foo
在步骤 2 中,但是foo
直到第 6 步才存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)