我感到很困惑,因为在业余时间我一直在阅读C#书籍以熟悉该语言。
我偶然发现了属性的使用;在这种情况下,是针对在我的班级中的私有声明字段中使用getter / setter。
这就是我在代码中保持简单的原因:
class ClassName
{
private int hWorked = 24;
public int HoursWorked
{
get
{
return hWorked;
}
}
}
现在这本书说:
如果我使用速记版本-
public int HoursWorked {get;}
-与上面的代码相同。
但是我需要澄清的是速记如何能够在不指定
hWorked
的情况下返回hWorked = value
值。简单来说:
HoursWorked
获取器如何知道以我的私有声明hWorked
为目标。 最佳答案
那么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