陣列-->集合-->泛型
(1)陣列
1. 陣列資料結構是system.array類的乙個例項.
2. system.array類的語法為
[serializableattribute]
[comvisibleattribute(true)]
public abstract class array : icloneable, ilist, icollection, ienumerable
3. 下面看乙個使用陣列的例子(我稱之為隱式實現)
protectedvoid
page_load(
object
sender, eventargs e)
;foreach
(string
strname
instrarrname)}
或者這樣寫
顯示結果
protectedvoid
page_load(
object
sender, eventargs e)}
如下jim,andy,sun,
4. 下面看另乙個使用陣列的例子(我稱之為顯式實現)
protectedvoid
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
inmypersonlist)}
6. 說明一下我的理解,定義了乙個集合類,實現ienumerable介面,則必須定義乙個與之相應的實現ienumerator介面的類,這樣是不是很麻煩呢?
(4)迭代器
1. 使用迭代器可避免上述麻煩,修改**,注意橙色部分
publicclass
person
}public
string
lastname
}public
person(
string
strfirstname,
string
strlastname)
}public
class
personlist : ienumerable
}public
ienumerator getenumerator()}}
例子實現ienumerable介面的類可以進行簡單迭代,例如foreach語句
usingsystem;
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...
IEnumerable和IQueryable之我觀
在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...
IEnumerable和IQueryable之我觀
在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...