C# - 属性如何使用getter / setter short hand访问私有字段

时间:2017-09-29 08:51:45

标签: c#

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

2 个答案:

答案 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;},它会在后台读取和写入一个未命名的变量。