C#索引器和屬性
索引器
索引器允許類或結構的例項按照與陣列相同的方式進行索引。索引器類似於屬性,不同之處在於它們的訪問器採用引數。
在下面的示例中,定義了一個泛型類,併為其提供了簡單的 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
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#學習筆記-欄位、屬性、索引器C#筆記索引
- C#屬性和lamdaC#
- C#反射設定屬性值和獲取屬性值C#反射
- SQL Server 生成C#公共實體屬性和私有屬性SQLServerC#
- C#中類的屬性訪問器--get和set分析C#
- C#裡面標籤的屬性和事件C#事件
- EF Core 索引器屬性(Indexer property)場景及應用索引Index
- defer 屬性和 async 屬性
- C#中屬性的解析C#
- C#屬性與欄位C#
- 瞭解下C# 屬性(Property)C#
- C# 類相同屬性賦值C#賦值
- Vue計算屬性和偵聽器Vue
- 瞭解下C# 索引器(Indexer)C#索引Index
- 屬性和方法
- C# 獲取修改了哪些屬性C#
- Vue中計算屬性和偵聽器Vue
- HCNP Routing&Switching之BGP團體屬性和團體屬性過濾器過濾器
- vue計算屬性和vue實力的屬性和方法Vue
- c# 執行緒Thread的IsBackground屬性C#執行緒thread
- [20190527]注意表與索引的並行屬性.txt索引並行
- 屬性和監聽
- JavaScript物件的資料屬性與訪問器屬性JavaScript物件
- [CSS]屬性選擇器CSS
- C#獲取某個物件的屬性值C#物件
- Winform Anchor和Dock屬性ORM
- calcMode, keyTimes和keySplines 屬性
- SVG repeatCount和repeatDur屬性SVG
- 織夢kindeditor編輯器圖片上傳增加圖片alt屬性和title屬性的方法
- Python的tkinter獲取元件屬性和設定元件屬性Python元件
- css可繼承屬性和非繼承屬性一覽CSS繼承
- Python類屬性和例項屬性分別是什麼?Python
- 屬性動畫與差值器動畫
- Vue中的計算屬性和偵聽器比較Vue
- 深入理解物件的資料屬性與訪問器屬性物件
- C#給自動屬性設定預設值C#
- C#快速入門教程(5)——欄位與屬性C#
- CMake 屬性之全域性屬性
- Python __dict__屬性:檢視物件內部所有屬性名和屬性值組成的字典Python物件