我感到很困惑,因为在业余时间我一直在阅读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

10-07 16:29