4.2 理解泛型類型
問題
您需要理解泛型類型在.NET中是如何工作的,它跟一般的.Net類型有什麼不同。
解決方案
幾個小實驗就可以演示一般類型和泛型類型之間的區別。例4-1中的StandardClass類就是一個般類型。
例4-1 StandardClass:一般的.Net類型
public class StandardClass
{
static int _count = 0; //StandardClass類的對象的表態計數器
int _maxItemCount; //項數目的最大值
object[] _items; //保存項的數組
int _currentItem = 0; //當前項數目
public StandardClass(int items) //構造函數
{
_count++; //對象數目加
_maxItemCount = items;
_items = new object[_maxItemCount]; //數組初始化
}
//用於添加項,為了適用於任何類型,使用了object類型
public int AddItem(object item)
{
if (_currentItem < _maxItemCount)
{
_items[_currentItem] = item;
return _currentItem++; //返回添加的項的索引
}
else
throw new Exception("Item queue is full ");
}
//用於從類中取得指定項
public object 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( )
{ //重載ToString方法,用於介紹類的情況
return "There are " + _count.ToString( ) +
" instances of " + this.GetType( ).ToString( ) +
" which contains " + _currentItem + " items of type " +
_items.GetType( ).ToString( ) + "";
}
}
StandardClass類有一個整型靜態成員變量_count,用於在實例構造器中計數。重載的ToString()方法打印在這個應用程序域中StandardClass類實例的數目。StandardClass類還包括一個object數組(_item),它的長度由構造方法中的傳遞的參數來決定。它實現了添加和獲得項的方法(AddItem,GetItem),還有一個只讀屬性來獲取數組中的項的數目(ItemCount)。