类中的字段限制性还是构造函数
实例化一个类的时候,是先执行类中的字段(给字段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还能多次赋值?