拿这个代码:
public int Foo {get;set;}
Run Code Online (Sandbox Code Playgroud)
与此更完整的手动编写代码相反:
private int x;
public int X
{
get { return x; }
set { x = value; }
}
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,编译器是否自动创建私有foo属性?
我不确定我所看到的这个约定是否有一个小写的私有属性被面向公众的大写掩盖,只是那个,约定,或者它实际上是语言/编译器的一部分,你可以写出来或者让它它会为你完成.
外壳与此无关。
编写如下所示的属性
public int x { get; set; }
Run Code Online (Sandbox Code Playgroud)
get将始终创建并使用通过/操作的匿名私有字段set。
为什么不看看发生了什么?
public class Test {
// private int myProp;
public int MyProp {
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
...
string report = String.Join(Environment.NewLine, typeof(Test)
.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
.Select(field => field.Name));
Console.Write(report);
Run Code Online (Sandbox Code Playgroud)
你会得到一个非常奇怪的名字
<MyProp>k__BackingField
但是这个奇怪的支持字段名称确保不存在名称冲突(您不能声明任何字段,属性,方法等<).
编辑:如果您取消注释, // private int myProp;您将拥有
Run Code Online (Sandbox Code Playgroud)myProp <MyProp>k__BackingField
请注意,这myProp不是MyProp财产的支持领域
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |