C#2.0新增功能07 getter/setter 單獨可訪問性

  屬性是一種成員,它提供靈活的機制來讀取、寫入或計算私有字段的值。 屬性可用做公共數據成員,但它們其實是稱爲訪問器的特殊方法。 這使得能夠輕鬆訪問數據,還有助於提升方法的安全性和靈活性。html

屬性概述

  • 屬性容許類公開獲取和設置值的公共方法,而隱藏實現或驗證代碼。api

  • get 屬性訪問器用於返回屬性值,而 set 屬性訪問器用於分配新值。 這些訪問器能夠具備不一樣的訪問級別。 有關詳細信息,請參閱限制訪問器可訪問性安全

  • value 關鍵字用於定義由 set 訪問器分配的值。ide

  • 屬性能夠是讀-寫屬性(既有 get 訪問器又有 set 訪問器)、只讀屬性(有 get 訪問器,但沒有 set 訪問器)或只寫訪問器(有 set 訪問器,但沒有 get 訪問器)。 只寫屬性不多出現,經常使用於限制對敏感數據的訪問。ui

  • 不須要自定義訪問器代碼的簡單屬性能夠做爲表達式主體定義或自動實現的屬性來實現。spa

具備支持字段的屬性

有一個實現屬性的基本模式,該模式使用私有支持字段來設置和檢索屬性值。 get 訪問器返回私有字段的值,set 訪問器在向私有字段賦值以前可能會執行一些數據驗證。 這兩個訪問器還能夠在存儲或返回數據以前對其執行某些轉換或計算。rest

下面的示例闡釋了此模式。 在此示例中,TimePeriod 類表示時間間隔。 在內部,該類將時間間隔以秒爲單位存儲在名爲 _seconds 的私有字段中。 名爲 Hours 的讀-寫屬性容許客戶以小時爲單位指定時間間隔。 get 和 set 訪問器都會執行小時與秒之間的必要轉換。 此外,set 訪問器還會驗證數據,若是小時數無效,則引起 ArgumentOutOfRangeExceptioncode

using System;

class TimePeriod
{
   private double _seconds;

   public double Hours
   {
       get { return _seconds / 3600; }
       set { 
             if (value < 0 || value > 24)
             { 
              throw new ArgumentOutOfRangeException(string.Format("{0}must be between 0 and 24.",nameof(value)));
             }
             _seconds = value * 3600; 
           } 
   } 
} 

class Program 
{ 
  static void Main() 
  { 
    TimePeriod t = new TimePeriod(); // 屬性分配致使調用「set」訪問器
    t.Hours = 24; // 檢索屬性會致使調用「get」訪問器。
    Console.WriteLine($"Time in hours: {t.Hours}"); 
  } 
} // 輸出結果:Time in hours: 24

 

相關文章
相關標籤/搜索