程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#泛型秘訣(1)(3)

C#泛型秘訣(1)(3)

編輯:關於C語言

GenericClass<T>類是一個泛型類型,同樣有靜態成員變量_count,實例構造器中對實例數目進行計算,重載的ToString()方法告訴您有多少GenericClass<T>類的實例存在。GenericClass<T>也有一個_itmes數組和StandardClass類中的相應方法,請參考例4-2。

Example4-2 GenericClass<T>:泛型類

public class GenericClass<T>
{
  static int _count = 0;
  int _maxItemCount;
  T[] _items;
  int _currentItem = 0;
  public GenericClass(int items)
  {
    _count++;
    _ _maxItemCount = items;
    _items = new T[_maxItemCount];
  }
  public int AddItem(T item)
  {
    if (_currentItem < _maxItemCount)
    {
      _items[_currentItem] = item;
      return _currentItem++;
    }
    else
      throw new Exception("Item queue is full ");
  }
  public T GetItem(int index)
  {
    Debug.Assert(index < _maxItemCount);
    if (index >= _maxItemCount)
      throw new ArgumentOutOfRangeException("index");
    return _items[index];
  }
  public int ItemCount
  {
    get { return _currentItem; }
  }
  public override string ToString()
  {
    return "There are " + _count.ToString() +
      " instances of " + this.GetType().ToString() +
      " which contains " + _currentItem + " items of type " +
      _items.GetType().ToString() + "";
  }
}

從GenericClass<T>中的少許不同點開始,看看_items數組的聲明。它聲明為:

T[] _items;

而不是

object[] _items;

_items數組使用泛型類(<T>)做為類型參數以決定在_itmes數組中接收哪種類型的項。StandarClass在_itmes數組中使用Objcec以使得所有類型都可以做為項存儲在數組中(因為所有類型都繼承自object)。而GenericClass<T>通過使用類型參數指示允許使用的對象類型來提供類型安全。

下一個不同在於AddItem和GetItem方法的聲明。AddItem現在使用一個類型T做為參數,而在StandardClass中使用object類型做為參數。GetItem現在的返回值類型T,StandardClass返回值為object類型。這個改變允許GenericClass<T>中的方法在數組中存儲和獲得具體的類型而非StandardClass中的允許存儲所有的object類型。

public int AddItem(T item)
  {
    if (_currentItem < _maxItemCount)
    {
      _items[_currentItem] = item;
      return _currentItem++;
    }
    else
      throw new Exception("Item queue is full ");
  }
  public T GetItem(int index)
  {
    Debug.Assert(index < _maxItemCount);
    if (index >= _maxItemCount)
      throw new ArgumentOutOfRangeException("index");
    return _items[index];
  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved