C#索引器和屬性

iDotNetSpace發表於2009-02-11

索引器

索引器允許類或結構的例項按照與陣列相同的方式進行索引。索引器類似於屬性,不同之處在於它們的訪問器採用引數。

在下面的示例中,定義了一個泛型類,併為其提供了簡單的 get 和 set 訪問器方法(作為分配和檢索值的方法)。Program 類為儲存字串建立了此類的一個例項。


 1class SampleCollection
 2{
 3    private T[] arr = new T[100];
 4    public T this[int i]
 5    {
 6        get
 7        {
 8            return arr[i];
 9        }
10        set
11        {
12            arr[i] = value;
13        }
14    }
15}
16
17// This class shows how client code uses the indexer
18class Program
19{
20    static void Main(string[] args)
21    {
22        SampleCollection stringCollection = new SampleCollection();
23        stringCollection[0] = "Hello, World";
24        System.Console.WriteLine(stringCollection[0]);
25    }
26}
27
 

索引器概述

索引器使得物件可按照與陣列相似的方法進行索引。

get 訪問器返回值。set 訪問器分配值。

this 關鍵字用於定義索引器。

value 關鍵字用於定義由 set 索引器分配的值。

索引器不必根據整數值進行索引,由您決定如何定義特定的查詢機制。

索引器可被過載。

索引器可以有多個形參,例如當訪問二維陣列時。

屬性

屬性是這樣的成員:它們提供靈活的機制來讀取、編寫或計算私有欄位的值。可以像使用公共資料成員一樣使用屬性,但實際上它們是稱為“訪問器”的特殊方法。這使得資料在可被輕鬆訪問的同時,仍能提供方法的安全性和靈活性。

在本示例中,類 TimePeriod 儲存了一個時間段。類內部以秒為單位儲存時間,但提供一個稱為 Hours 的屬性,它允許客戶端指定以小時為單位的時間。Hours 屬性的訪問器執行小時和秒之間的轉換。

 示例:

class TimePeriod
{
    private double seconds;

    public double Hours
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}

class Program
{
    static void Main()
    {
        TimePeriod t = new TimePeriod();

        // Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;

        // Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }
}

 

輸出

   Time in hours: 24

屬性概述
屬性使類能夠以一種公開的方法獲取和設定值,同時隱藏實現或驗證程式碼。

get 屬性訪問器用於返回屬性值,而 set 訪問器用於分配新值。這些訪問器可以有不同的訪問級別。有關更多資訊,請參見訪問器可訪問性。

value 關鍵字用於定義由 set 索引器分配的值。

不實現 set 方法的屬性是隻讀的。

 

索引器和屬性之間的比較

屬性
 索引器
 
允許呼叫方法,如同它們是公共資料成員。
 允許呼叫物件上的方法,如同物件是一個陣列。
 
可通過簡單的名稱進行訪問。
 可通過索引器進行訪問。
 
可以為靜態成員或例項成員。
 必須為例項成員。
 
屬性的 get 訪問器沒有引數。
 索引器的 get 訪問器具有與索引器相同的形參表。
 
屬性的 set 訪問器包含隱式 value 引數。
 除了 value 引數外,索引器的 set 訪問器還具有與索引器相同的形參表。
 


 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-548716/,如需轉載,請註明出處,否則將追究法律責任。

相關文章