繁体   English   中英

C#-属性如何使用getter / setter快捷方式访问私有字段

[英]C# - How do properties access a private field using getter/setter short hand

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

很好的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

速记版本使用“隐藏”变量来存储值。

如果您编写public int hWorked {get; set;} public int hWorked {get; set;}它在后台从一个未命名的变量读取和写入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM