1.泛型建構式與解建構式

public class MyGenericList<T>

{

   private ArrayList _elements;

   public MyGenericList()  //建構式

   {

      _elements = new ArrayList();

   }

   ~MyGenericList() //解建構式

   {

   }

}

注意地方:

泛型的建構式與解建構式不需要加上型別參數例如MyGenericList<T>加了反而無法通過編譯。

 

2.Default表示法

由於型別參數T代表由外界傳入決定型別,因此若我扪在撰寫泛型類別時,要將某泛型物件之參數設定為傳入型別之初始植,就不能用特定數植

此時應該使用default運算子來取得未知之型別預設植

public class MyGenericList<T> : IMyList<T>

{

   private ArrayList _elements;

   public void GenericItems(int numOfItems)

   {

      T[ ] buf = new T[numOfItems];

      for(int i = 0; i < numOfItems; i++)

      {

         buf[i] = default(T); //設定元素初始植

      }

   }

}

 

3.泛型介面

public  interface IMyList<T>

{

   int Count{ get; }

   T this [index]

   {

      get;

      set;

   }

}

此介面定義了兩個屬性: 一個唯讀屬性count,用來傳回串列元素數量,以及一個index用來取得某元素之內容。

public class MyGenericList<T> : IMList<T>

{

   private ArrayList _elements;

   public int Count

   {

      get {return _elements.Count;}

   }

   public T this[int index]

   {

      get{ return (T) _elements[index]; }

      set{ _elements[index] = value; }

   }

}

 

泛型介面範例2:

 擷取  

擷取  

擷取  

 

特別注意:

1.建立Hello與Hello2之物件均傳入string,但使用GetWord方法時一個傳入字串另一個是傳入數字。

2.此種方式無法通過編譯:

class Foo<T> : ISayHello<int> , ISayHello<T>

{

}

因為一個類別不得實作重複之介面,ISayHello<T>型別參數T已經包含int了。

 

4.泛型方法

泛型方法宣告語法:

回傳型別  方法名稱 <T1,T2,T3...,Tn>(T1 param) [where 子句]

ex.

public void Print<T>(T obj)

public R Print<T,R>(T obj) where R : new()

此範例中宣告兩個多載泛型方法:Print<>,其中一個有回傳植一個沒有。

有回傳植的那個多載方法使用了where子句,來限制傳回植型別R必須提供預設建構式。 

 

ex.

建立泛型方法:

擷取    

呼叫不同泛型方法:

擷取    

 

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()