<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 使用索引器(C# 編程指南) 索引器在語法上方便您創建客戶端應用程序可將其作為數組訪問的[類](https://msdn.microsoft.com/zh-CN/library/0b0thckt.aspx)、[結構](https://msdn.microsoft.com/zh-CN/library/ah19swz4.aspx)或[接口](https://msdn.microsoft.com/zh-CN/library/87d83y5b.aspx)。索引器經常是在主要用于封裝內部集合或數組的類型中實現的。例如,假定具有一個名為 TempRecord 的類,此類表示在 24 小時內的 10 個不同時間記錄的華氏度。此類包含一個表示溫度的 float 類型的名為“temps”的數組和表示記錄溫度的日期的 [DateTime](https://msdn.microsoft.com/zh-CN/library/system.datetime.aspx)。通過在此類中實現一個索引器,客戶端可以通過 float temp = tr[4] 而不是 float temp = tr.temps[4] 語法訪問 TempRecord 實例中的溫度。索引器表示法不僅簡化了客戶端應用程序的語法,還使其他開發人員能夠更加直觀地理解類及其用途。 要聲明類或結構上的索引器,請使用 [this](https://msdn.microsoft.com/zh-CN/library/dk1507sz.aspx) 關鍵字,如下例所示: ``` public int this[int index] // Indexer declaration { // get and set accessors } ``` ## 備注 索引器類型及其參數類型必須至少如同索引器本身一樣是可訪問的。有關可訪問級別的更多信息,請參見[訪問修飾符](https://msdn.microsoft.com/zh-CN/library/wxh6fsc7.aspx)。 有關如何對接口使用索引器的更多信息,請參見[接口索引器](https://msdn.microsoft.com/zh-CN/library/tkyhsw31.aspx)。 索引器的簽名由其形參的數量和類型組成。它不包括索引器類型或形參名。如果在同一類中聲明一個以上的索引器,則它們必須具有不同的簽名。 索引器值不屬于變量;因此,不能將索引器值作為 [ref](https://msdn.microsoft.com/zh-CN/library/14akc2c7.aspx) 或 [out](https://msdn.microsoft.com/zh-CN/library/t3c3bfhx.aspx) 參數進行傳遞。 要為索引器提供一個其他語言可以使用的名字,請使用聲明中的 name 特性。例如: ``` [System.Runtime.CompilerServices.IndexerName("TheItem")] public int this [int index] // Indexer declaration { } ``` 此索引器將具有名稱 TheItem。不提供名稱特性將生成 Item 默認名稱。 ## 示例 1 ### 說明 下面的示例說明如何聲明私有數組字段、temps 和索引器。使用索引器可直接訪問實例 tempRecord[i]。另一種使用索引器的方法是將數組聲明為 [public](https://msdn.microsoft.com/zh-CN/library/yzh058ae.aspx) 成員并直接訪問它的成員 tempRecord.temps[i]。 請注意,當計算索引器的訪問時(例如,在 **Console.Write** 語句中),將調用 [get](https://msdn.microsoft.com/zh-CN/library/ms228503.aspx) 訪問器。因此,如果 **get** 訪問器不存在,將發生編譯時錯誤。 ### 代碼 ``` class TempRecord { // Array of temperature values private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 61.3F, 65.9F, 62.1F, 59.2F, 57.5F }; // To enable client code to validate input // when accessing your indexer. public int Length { get { return temps.Length; } } // Indexer declaration. // If index is out of range, the temps array will throw the exception. public float this[int index] { get { return temps[index]; } set { temps[index] = value; } } } class MainClass { static void Main() { TempRecord tempRecord = new TempRecord(); // Use the indexer's set accessor tempRecord[3] = 58.3F; tempRecord[5] = 60.1F; // Use the indexer's get accessor for (int i = 0; i < 10; i++) { System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]); } // Keep the console window open in debug mode. System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); } } /* Output: Element #0 = 56.2 Element #1 = 56.7 Element #2 = 56.5 Element #3 = 58.3 Element #4 = 58.8 Element #5 = 60.1 Element #6 = 65.9 Element #7 = 62.1 Element #8 = 59.2 Element #9 = 57.5 */ ``` ## 使用其他值進行索引 C# 并不將索引類型限制為整數。例如,對索引器使用字符串可能是有用的。通過搜索集合內的字符串并返回相應的值,可以實現此類索引器。由于訪問器可被重載,字符串和整數版本可以共存。 ## 示例 2 ### 說明 在此例中,聲明了存儲星期幾的類。聲明了一個 **get** 訪問器,它接受字符串(天名稱),并返回相應的整數。例如,星期日將返回 0,星期一將返回 1,等等。 ### 代碼 ``` // Using a string as an indexer value class DayCollection { string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" }; // This method finds the day or returns -1 private int GetDay(string testDay) { for (int j = 0; j < days.Length; j++) { if (days[j] == testDay) { return j; } } throw new System.ArgumentOutOfRangeException(testDay, "testDay must be in the form \"Sun\", \"Mon\", etc"); } // The get accessor returns an integer for a given string public int this[string day] { get { return (GetDay(day)); } } } class Program { static void Main(string[] args) { DayCollection week = new DayCollection(); System.Console.WriteLine(week["Fri"]); // Raises ArgumentOutOfRangeException System.Console.WriteLine(week["Made-up Day"]); // Keep the console window open in debug mode. System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); } } // Output: 5 ``` ## 可靠編程 提高索引器的安全性和可靠性有兩種主要的方法: * 確保結合某一類型的錯誤處理策略,以處理萬一客戶端代碼傳入無效索引值的情況。在本主題前面的第一個示例中,TempRecord 類提供了 Length 屬性,使客戶端代碼能夠在將輸入傳遞給索引器之前對其進行驗證。也可以將錯誤處理代碼放入索引器自身內部。確保為用戶記錄在索引器的訪問器中引發的任何異常。 * 應當為 **get** 和 [set](https://msdn.microsoft.com/zh-CN/library/ms228368.aspx) 訪問器的可訪問性設置盡可能多的限制。這一點對 **set** 訪問器尤為重要。有關更多信息,請參見 [限制訪問器可訪問性(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/75e8y5dd.aspx)。 ## 請參閱 [C# 編程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [索引器(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/6x16t2tx.aspx) [屬性(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/x9fsa0sw.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看