日期:2014-05-17  浏览次数:20911 次

类中的字段限制性还是构造函数
实例化一个类的时候,是先执行类中的字段(给字段1赋初值)呢?还是执行构造函数中(给字段2赋初值)的代码呢?
------解决方案--------------------

        class MyClass
        {
            public string 字段1 = "AAA";
            public MyClass()
            {
                Console.WriteLine(this.字段1)
                字段1 = "BBB";
            }
        }

MyClass1 mc = new MyClass1();
Console.WriteLine(mc.字段1);
//输出:
AAA
BBB
可以很明显的看出先初始化类中的字段,然后才调用构造函数赋值。
------解决方案--------------------
用ildasm 反编译一下会发现ls说的不太准确
public string 字段1 = "AAA";//这段代码会直接编译进构造函数

            public MyClass()
            {
                Console.WriteLine(this.字段1)
                字段1 = "BBB";
            }
------解决方案--------------------
其实直接给成员变量赋值只是一个语法糖。看下面的代码:

class A
{
    public readonly string X = "1";
    public A() { X = "2"; X = "3"; }
}

很多人觉得奇怪,既然是readonly还能多次赋值?