一、自动初始化属性:
确实这个比之前的版本简化了一下,不过你肯定很好奇,到底编译器给我们做了哪些东西呢?
<span style="color:#000000;">class Student
{
public string Name { get; set; } = "ctrip";
}
</span>
从这张图中可以看到,在ctor中<Name>k__backingfield=“ctrip“的赋值在base::ctor之前,这就说明name是变量初始化赋值,而不属于
构造函数赋值,那有什么区别呢,如果base::ctor在<Name>k__backingfield=”ctrip"之前,那就是构造函数赋值了,不过我得特别要指明
一下,是源代码级别的区别,而不是IL中的区别,因为在IL中都是构造函数赋值,不过语句顺序不一样而已,然后我把内部做的代码复原如下:
1 class Student
2 { 3 private string k__BackingField = "ctrip"; 4 5 public string Name 6 { 7 get 8 { 9 return k__BackingField; 10 } 11 12 set 13 { 14 k__BackingField = value; 15 } 16 } 17 }
然后再看看怎么让base::ctor在<Name>k__backingfield="ctrip"之前。
1 class Student
2 { 3 private string k__BackingField; 4 5 public string Name 6 { 7 get 8 { 9 return k__BackingField; 10 } 11 12 set 13 { 14 k__BackingField = value; 15 } 16 } 17 18 public Student() 19 { 20 k__BackingField = "ctrip"; 21 } 22 }