您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么理解C#索引器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
索引器使你可從語法上方便地創建類、結構或接口,以便客戶端應用程序可以像訪問數組一樣訪問它們。編譯器將生成一個 Item 屬性(或者如果存在 IndexerNameAttribute
,也可以生成一個命名屬性)和適當的訪問器方法。在主要目標是封裝內部集合或數組的類型中,常常要實現索引器。例如,假設有一個類 TempRecord
,它表示 24 小時的周期內在 10 個不同時間點所記錄的溫度(單位為華氏度)。此類包含一個 float[]
類型的數組 temps
,用于存儲溫度值。通過在此類中實現索引器,客戶端可采用 float temp = tempRecord[4]
的形式(而非 float temp = tempRecord.temps[4]
)訪問 TempRecord
實例中的溫度。索引器表示法不但簡化了客戶端應用程序的語法;還使類及其目標更容易直觀地為其它開發者所理解。
語法聲明:
public int this[int param] { get { return array[param]; } set { array[param] = value; } }
這里分享一下設計封裝的角度使用索引器,場景是封裝一個redis
的helper
類。在此之前我們先看一個簡單的官方示例。
using System; class SampleCollection<T> { // Declare an array to store the data elements. private T[] arr = new T[100]; // Define the indexer to allow client code to use [] notation. public T this[int i] { get { return arr[i]; } set { arr[i] = value; } } } class Program { static void Main() { var stringCollection = new SampleCollection<string>(); stringCollection[0] = "Hello, World"; Console.WriteLine(stringCollection[0]); } } // The example displays the following output: // Hello, World.
RedisHelper
類的封裝(偽代碼),這樣用的好處是不用在需要設置redis
的db
號而大費周章。
public class RedisHelper { private static readonly object _lockObj = new object(); private static RedisHelper _instance; private int dbNum; private RedisHelper() { } public static RedisHelper Instance { get { if (_instance == null) { lock (_lockObj) { if (_instance == null) { _instance = new RedisHelper(); } } } return _instance; } } public RedisHelper this[int dbid] { get { dbNum = dbid; return this; } } public void StringSet(string content) { Console.WriteLine($"StringSet to redis db { dbNum }, input{ content }."); } }
調用:
RedisHelper.Instance[123].StringSet("測試數據");
運行效果:
“怎么理解C#索引器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。