發展:陣列-->集合-->泛型
(1)陣列
1. 陣列資料結構是system.array類的乙個例項.
2. system.array類的語法為
[serializableattribute]
[comvisibleattribute(true)]
public abstract class array : icloneable, ilist, icollection, ienumerable
3. 下面看乙個使用陣列的例子(我稱之為隱式實現)
protected void page_load(object sender, eventargs e)
;foreach (string strname in strarrname)
}或者這樣寫
protected void page_load(object sender, eventargs e)
}顯示結果如下
jim,andy,sun,
4. 下面看另乙個使用陣列的例子(我稱之為顯式實現)
protected void page_load(object sender, eventargs e)
}顯示結果如下
jim,andy,sun,
5. 優點:可以高效的訪問給定下標的元素;system.array類有自己的c#語法,使用它程式設計非常的直觀.
6. 缺點:在例項化時必須指定陣列的大小,以後也不能新增,插入,刪除元素.
(2)集合
1. 針對陣列資料結構的缺點,我們使用集合資料結構.
2. 集合資料結構中的類都位於system.collections命名空間中.
3. 說到集合,我們必須先了解幾個介面.想具體了解以下介面,可參考(3)集合介面
3.1 ienumerable介面和ienumerator介面
3.2 icollection介面
public inte***ce icollection : ienumerable
3.3 ilist介面
public inte***ce ilist : icollection, ienumerable
3.4 idictionary介面
public inte***ce idictionary : icollection, ienumerable
4. 說明一下:
4.1 icollection介面是system.collections命名空間中類的基介面.
4.2 icollection介面擴充套件ienumerable;idictionary和ilist則是擴充套件icollection的更為專用的介面.idictionary實現是鍵/值對的集合,如hashtable類.ilist實現是值的集合,其成員可通過索引訪問,如arraylist類.
4.3 某些集合(如queue類和stack類)限制對其元素的訪問,它們直接實現icollection介面.
4.4 如果idictionary介面和ilist介面都不能滿足所需集合的要求,則從icollection介面派生新集合類以提高靈活性.
(3)ienumerable介面和ienumerator介面
1. 我的理解:只有實現了ienumerable介面的資料結構類才能使用foreach語句,下面給出例子
//person類
public class person
}public string lastname
}public person(string strfirstname, string strlastname)
}//personlist集合,實現ienumerable介面
public class personlist : ienumerable
}public ienumerator getenumerator()
}//實現ienumerator介面
public class peopleenumerator : ienumerator
catch (indexoutofrangeexception)}}
public peopleenumerator(person myarrperson)
public bool movenext()
public void reset()
}//集合的使用
protected void page_load(object sender, eventargs e)
; personlist mypersonlist = new personlist(myarrperson);
foreach (person myperson in mypersonlist)
}6. 說明一下我的理解,定義了乙個集合類,實現ienumerable介面,則必須定義乙個與之相應的實現ienumerator介面的類,這樣是不是很麻煩呢?
(4)迭代器
1. 使用迭代器可避免上述麻煩,修改**,注意橙色部分
public class person
}public string lastname
}public person(string strfirstname, string strlastname)
}public class personlist : ienumerable
}public ienumerator getenumerator()}}
例子實現ienumerable介面的類可以進行簡單迭代,例如foreach語句
using system;
using system.collections.generic;
using system.text;
using system.collections;
namespace ienumerable介面}}
class a : ienumerable
else if (i == y)
else if (i == z)
else}}
}}
陣列,集合,IEnumerable介面,迭代器
陣列 集合 泛型 1 陣列 1.陣列資料結構是system.array類的乙個例項.2.system.array類的語法為 serializableattribute comvisibleattribute true public abstract class array icloneable,il...
IEnumerable和IQueryable之我觀
在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...
IEnumerable和IQueryable之我觀
在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...