我很困惑,因为在业余时间我一直在阅读C#书籍以熟悉该语言。
我偶然发现了财产的使用;在这种情况下,它是关于在我的类中使用getter / setter用于私有声明的字段。
这就是我在代码中保持简单的原因:
class ClassName
{
private int hWorked = 24;
public int HoursWorked
{
get
{
return hWorked;
}
}
}
现在这本书说:
如果我使用简写版本 -
public int HoursWorked {get;}
- 它与上面的代码相同。
但我需要澄清的是简写如何能够返回 hWorked
值而不指定hWorked = value
。
简单来说:HoursWorked
getter如何知道如何定位我私下声明的hWorked
。
答案 0 :(得分:3)
好public int HoursWorked {get;}
创建自己的支持字段,不会解决 hWorked
。问题(简写版)中的代码等价于
class ClassName {
public int HoursWorked { get; } = 24;
}
您可以在 Reflection 的帮助下看到支持字段:
using System.Reflection;
...
var fields = string.Join(", ", typeof(ClassName)
.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
.Select(f => f.Name));
Console.Write(fields);
结果(可能会有所不同):
<HoursWorked>k__BackingField
如果您检查初始 ClassName
实施,您将获得
hWorked
答案 1 :(得分:1)
速记版本使用&#34;隐藏&#34;变量来存储值。
如果你写public int hWorked {get; set;}
,它会在后台读取和写入一个未命名的变量。