[C#.NET][VB.NET] 一般 / 泛型 Generic Collection 集合型別介紹

一般型別(點選連結擴充說明)泛型型別
ArrayListList< >
QueueQueue< >
StackStack< >
HashtableDictionary< >
StoredListStoredList< >
ListDictionaryDictionary< >
HybridDictionaryDictionary< >
OrderedDictionaryDictionary< >
SortedDictionaryStoredDictionary< >
NameValueCollectionDictionary< >
DictionaryEntryKeyValPair< >
StringCollectionList<String>
StringDictionaryDictionary<String>
  

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

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

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

集合類別結構

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

集合類別介面

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

比較集合

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

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

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

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

StringDictionary索引鍵與資料值均採用強式型別宣告為字串,用法跟Hashtable相似
StringCollection用法跟ArrayList相似
NameValueCollectionStringDictionary相似,差別在於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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值