我遇到了this question:
namespace ClassLibrary3
{
public class Class1
{
public int a { get; set; }
public int A { get; set; }
}
public class test : Class1
{
a=1; // error 'ClassLibrary3.Class1.a' is a 'property' but is used like a 'type'
public void hello()
{
a = 10;
}
}
}
Marc Gravell说“除了字段初始值设定项,代码必须在方法中”。
为什么派生类不能访问方法之外的属性?这背后的原因是什么?
答案 0 :(得分:7)
您不能将任何代码放在方法之外(字段初始值设定项除外)。
所有代码都需要具有特定的执行时间点 具体来说,代码将在调用包含它的方法时执行。
要回答您要问的问题,字段初始化程序无法访问类实例,因为它们在构造函数之前运行。
因此,您不能使用您自己的类中的实例成员或字段初始值设定项中的基类。
答案 1 :(得分:2)
想象一下,你理论上允许你提出什么要求然后要回答的一个重要问题是:这个代码何时应该被执行?一种选择是在构造函数运行之前或之后立即运行它。但是,你可以把代码放在构造函数中(无论是在开头还是结尾)不是吗?你为什么要让构造函数代码遍布整个类?除了使解析和阅读代码更难以获得任何东西之外。
答案 2 :(得分:1)
C#构造函数执行顺序是:
然后从派生程度最高的类开始: