簡體   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