Generic 型別參數和約束的規則

來源:互聯網
上載者:User
1.      泛型類可以從具體的、封閉式構造或開放式構造基類繼承

    class BaseNode { }

    class BaseNodeGeneric<T> { }

 

    // concrete type

    class NodeConcrete<T> : BaseNode { }

 

    //closed constructed type

    class NodeClosed<T> : BaseNodeGeneric<int> { }

 

    //open constructed type

    class NodeOpen<T> : BaseNodeGeneric<T> { }

2.      非泛型類(換句話說,即具體類)可以從封閉式構造基類繼承

l 無法從開放式構造類型,運行時用戶端代碼無法提供基類所需的參數類型

 

//No error

    class Node1 : BaseNodeGeneric<int> { }

 

    //Generates an error

    //class Node2 : BaseNodeGeneric<T> {}

 

    //Generates an error

    //class Node3 : T {}

 

3.      從開放式構造類型繼承的泛型類必須為任何未被繼承類共用的基類型別參數提供類型變數

     class BaseNodeMultiple<T, U> { }

 

    //No error

    class Node4<T> : BaseNodeMultiple<T, int> { }

 

    //No error

    class Node5<T, U> : BaseNodeMultiple<T, U> { }

 

    //Generates an error

    //class Node6<T> : BaseNodeMultiple<T, U> {}

 

 

 

4.      從開放式構造類型繼承的泛型類必須指定約束,這些約束是基底類型約束的超集或暗示基底類型約束:

 class NodeItem<T> where T : System.IComparable<T>, new() { }

    class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { }

 

 

5.      泛型型別可以使用多個型別參數和約束

   class SuperKeyType<K, V, U>

        where U : System.IComparable<U>

        where V : new()

    { }

 

6.      開放式構造類型和封閉式構造類型可以用作方法參數

class myGenericA<T>

    {

        void Swap<T>(List<T> list1, List<T> list2)

        {

            //code to swap items

        }

 

        void Swap(List<int> list1, List<int> list2)

        {

            //code to swap items

        }

    }

 

7.      如果某個泛型類實現了介面,則可以將該類的所有執行個體強制轉換為該介面 8.      泛型類是不變的

static void TestGenericBaseClass()

        {

            //Generate an error

            List<object> myList = new List<string>();

            //無法將類型“System.Collections.Generic.List<string>”隱式轉換為“System.Collections.Generic.List<object>”

 

          

        }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.