1. 程式人生 > >泛型編程

泛型編程

locate public -c warning copy ade st2 item icomparer

理論點:

聲明一個具體的泛型類時,編譯器會至少做一個全面的字面上的類型替換,將T替換成具體的類型參數。但不僅僅字面上的替換,還包括全面的語義上的替換,做類型檢查,檢查T是否為有效的指定類型。

如何使用:

1. 普通方法與泛型方法

// 普通方法
static void Swap(ref string a, ref string b)
{
      T c = a;
      a = b;
      b = c;
}

// 泛型方法
static void Swap<T>(ref T a, ref T b)
{
      T c = a;
      a 
= b; b = c; }

2.

泛型類的類型參數與內部泛型函數的類型參數不能相同。如果內部的泛型函數需要使用其他的類型參數,請考慮換一個標識符。

class GenericList<T>
{
    // CS0693
    void SampleMethod<T>() { }
}

class GenericList2<T>
{
    //No warning
    void SampleMethod<U>() { }
}

3. 對類型參數的約束

void SwapIfGreater<T>(ref
T lhs, ref T rhs) where T : System.IComparable<T> { T temp; if (lhs.CompareTo(rhs) > 0) { temp = lhs; lhs = rhs; rhs = temp; } }

4. 泛型方法可以使用許多類型參數進行重載。 例如,下列方法可以全部位於同一個類中:

void DoWork() { }
void DoWork<T>() { }
void DoWork<T, U>() { }

5. 一個典型的泛型類示例

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
{

    public void CopyTo(T[] array);

    public int FindIndex(Predicate<T> match);

    public int IndexOf(T item);

    public void Sort(Comparison<T> comparison);

    public void Sort(IComparer<T> comparer);

}

參考文章:

http://msdn.microsoft.com/zh-cn/library/vstudio/twcad0zb.aspx

泛型編程