close
一般型別(點選連結擴充說明) 泛型型別
ArrayList List< >
Queue Queue< >
Stack Stack< >
Hashtable Dictionary< >
StoredList StoredList< >
ListDictionary Dictionary< >
HybridDictionary Dictionary< >
OrderedDictionary Dictionary< >
SortedDictionary StoredDictionary< >
NameValueCollection Dictionary< >
DictionaryEntry KeyValPair< >
StringCollection List<String>
StringDictionary Dictionary<String>
   

表格左邊一般型別,大都已經學習過了,也知道大致上的類別如何使用,右邊則是對應的泛型型別,功能就跟一般型別差不多,使是用法不同罷了。為何需要泛型?假設當你需要撰寫一個功能/類別時,而你沒有辦法得知使用者會使用什麼型態的參數,有可能是string、也有可能是int,假如我們用泛型就不用擔心程式被呼叫時還要考慮傳入的型別,只要專心開發功能即可。

標準的集合,在功能上或執行的效率都有限制,System.Collections 命名空間

Hashtable 用於包含10個或更多項目的集合,對小集合沒效率
SortedList 依索引鍵來排序項目。

集合類別結構

DictionaryEntry 主要是用來取出字典集合著Key和Value,我們可以利用它來逐一處理集合中的項目。

集合類別介面

IDictionary 主要是用索引鍵來存取項目,不能用索引值。
IComparer 自訂排序與順序的比較
IEqualityComparer 只接受相等比較,自訂排序與順序的比較是由 IComparer 介面來提供

比較集合

CaseInsensitiveComparer 比較兩個物件是否相等,忽略字串的大小寫。

特殊的集合,彌補標準字典的限制,System.Collections.Specialized 命名空間

ListDictionary 用於包含10個或更少項目的集合,對大集合沒效率
HybridDictionary 會先實作成ListDictionary的小集合,當內部變大時,將會把自己變成Hashtable的大集合。
OrderedDictionary SortedList類別多了一些功能,更為強大。

字串集合,只能使用字串,如果你操作的對象不是物件而是字串,那這個類別絕對是你的首選,因為它可以省下轉型的動作

StringDictionary 索引鍵與資料值均採用強式型別宣告為字串,用法跟Hashtable相似
StringCollection 用法跟ArrayList相似
NameValueCollection StringDictionary相似,差別在於NameValueCollection可以單一索引鍵對應多重值。

 

CollectionsUtil 建立忽略字串大小寫HashtableSortedList的集合。

 

如何使用泛型型別,以下就以List< >類別來做說明

1.匯入命名空間 System.Collections.Generic

using System.Collections.Generic;

2.引用泛型類別



//引用泛型
List<string> myGen = new List<string>();

3.加入集合



myGen.Add("簡單");
myGen.Add("範例");            

4.輸出



foreach (string i in myGen)
{
     Console.WriteLine(i);
}

泛型並不困難,使用上跟一般型別沒什麼不同,


在C#底下就用<傳入的型別>,例如:List<string> myGen = new List<string>( );


在VB子下就用(Of 傳入的型別),例如:Dim myGen As New List(Of String),Dim myGen As List(Of String) = New List(Of String)。


如何自定泛型類別


泛型類別宣告如同一般類別相似,只是宣告內容方法不一樣


1


1


1.宣告泛型類別


2.宣告泛型方法



//泛型類別宣告
public class myGeneric<T>
{
     //泛型方發宣告
     public void myTest(T myValue)
     {
          System.Type myType = myValue.GetType();
          Console.WriteLine(myType);
     }
}

3.引用泛型類別



myGeneric<int> myCom1 =new myGeneric<int>();
myCom1.myTest(1);
myGeneric<string> myCom2 = new myGeneric<string>();
myCom2.myTest("sdf");
myGeneric<double> myCom3 = new myGeneric<double>();
myCom3.myTest(12.2344);

 


不管引用任何型態,泛型類別都能照單全收,程式的重用性就大大的提昇。


 


1


範例已包含VB與C#


範例下載:泛型.rar

arrow
arrow
    全站熱搜

    yc421206 發表在 痞客邦 留言(2) 人氣()