c# – 为什么子类变量在父类成员变量之前初始化
请考虑以下代码.字段i和j在m和n之前初始化.我们知道父对象是在子对象之前创建的,但是在我的程序中,编译器正在为基类之前的子类的成员变量分配和初始化内存.这是为什么?
class X { private int m = 0; private int n = 90; public X() { } } class Y:X { private int i = 8; private int j = 6; public Y() { } public static void Main(string []args) { Y y1 = new Y(); } } 解决方法
这在
Eric Lippert’s blog中解释:
不确定为什么readonly在这里提到,但是例如,这确保了以下场景,尽管是愚蠢的,工作: 1. class Base { public Base() { if (this is Derived) (this as Derived).Go(); } } class Derived : Base { X x = new X(); public void Go() { x.DoSomething(); // ! } } 2. class Base { public Base() { Go(); } public virtual Go() {} } class Derived : Base { X x = new X(); public override void Go() { x.DoSomething(); // ! } } 该命令在C# Language Specification(17.10.2)中明确说明:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |