<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 運行時中的泛型(C# 編程指南) 將泛型類型或方法編譯為 Microsoft 中間語言 (MSIL) 時,它包含將其標識為具有類型參數的元數據。 泛型類型的 MSIL 的使用因所提供的類型參數是值類型還是引用類型而不同。 第一次用值類型作為參數來構造泛型類型時,運行時會創建專用泛型類型,將提供的參數代入到 MSIL 中的適當位置。 對于每個用作參數的唯一值類型,都會創建一次專用泛型類型。 例如,假設您的程序代碼聲明了一個由整數構造的堆棧: ``` Stack<int> stack; ``` 在此位置,運行時生成 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類的專用版本,并相應地用整數替換其參數。 現在,只要程序代碼使用整數堆棧,運行時就會重用生成的專用 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類。 在下面的示例中,創建了整數堆棧的兩個實例,它們共享 Stack&lt;int&gt; 代碼的單個實例: ``` Stack<int> stackOne = new Stack<int>(); Stack<int> stackTwo = new Stack<int>(); ``` 但是,假定在代碼中的另一個位置創建了使用不同值類型(比如 long 或用戶定義的結構)作為其參數的另一個 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類。 因此,運行時將生成另一個版本的泛型類型,并在 MSIL 中的適當位置替換 long。 由于每個專用泛型類本身就包含值類型,因此不再需要轉換。 對于引用類型,泛型的工作方式略有不同。 第一次使用任何引用類型構造泛型類型時,運行時會創建專用泛型類型,用對象引用替換 MSIL 中的參數。 然后,每次使用引用類型作為參數來實例化構造類型時,無論引用類型的具體類型是什么,運行時都會重用以前創建的泛型類型的專用版本。 之所以可以這樣,是因為所有引用的大小相同。 例如,假設您有兩個引用類型:一個 Customer 類和一個 Order 類,并且同時假設您創建了一個 Customer 類型的堆棧: ``` class Customer { } class Order { } ``` ``` Stack<Customer> customers; ``` 此時,運行時將生成 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類的一個專用版本,該版本存儲稍后將填寫的對象引用,而不是存儲數據。 假設下一行代碼創建另一個引用類型的堆棧,該堆棧名為 Order: ``` Stack<Order> orders = new Stack<Order>(); ``` 不同于值類型,對于 Order 類型不創建 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類的另一個專用版本。 而是創建 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類的一個專用版本實例,并將 orders 變量設置為引用它。 假設接下來您遇到一行創建 Customer 類型堆棧的代碼: ``` customers = new Stack<Customer>(); ``` 與前面使用 Order 類型創建的 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類一樣,創建了專用 [Stack&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/3278tedw.aspx) 類的另一個實例。 包含在其中的指針設置為引用 Customer 類型大小的內存區域。 因為引用類型的數量會隨程序的不同而大幅變化,C# 泛型實現將編譯器為引用類型的泛型類創建的專用類的數量減小到一個,從而大幅減小代碼量。 此外,使用值類型或引用類型參數實例化泛型 C# 類時,反射可以在運行時查詢它,并且可以確定它的實際類型及其類型參數。 ## 請參見 <a id="seeAlsoToggle"></a> #### 參考 [泛型介紹(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/0x6a29h6.aspx) [System.Collections.Generic](https://msdn.microsoft.com/zh-cn/library/system.collections.generic.aspx) #### 概念 [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) #### 其他資源 [.NET Framework 中的泛型](https://msdn.microsoft.com/zh-cn/library/ms172192.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>

                              哎呀哎呀视频在线观看