VB.NET中實現IEnumerator接口
2024-07-10 13:00:31
供稿:網友
vb.net中實現ienumerator接口
在面向對象的設計中,經常會用到有類似父子關系的這個對象,比如在我現在的一個項目中,有訂單對象,在一個訂單下又包含多個產品,這時我就想用iterator模式來封裝訂單下的產品,在dot net中的ienumerator接口就是用來實現迭代的,來支持dot net中的for each的操作。
要實現ienumerator接口,需在實現以下幾個函數來支持ienumerator接口的操作
overridable readonly property current() as object
current用于在迭代過程中得到當前的對象
public overridable function movenext() as boolean
movenext用于在迭代過程中將迭代指針指向下一個對象,初始是迭代指針指向集合的開始(在第一個節點之前的位置),一旦越過集合的結尾,在調用 reset 之前,對 movenext 的后續調用返回 false。
overridable sub reset()
將枚舉數設置為其初始位置,該位置位于集合中第一個元素之前。
只要集合保持不變,枚舉數就將保持有效。如果對集合進行了更改(例如添加、修改或刪除元素),則該枚舉數將失效且不可恢復,并且下一次對 movenext 或 reset 的調用將引發 invalidoperationexception。
下需是一個具體的實現ienumerator接口的對像
'------------------------實現ienumerator接口的類----------------------------------
imports system.collections
'在此實際實現的是system.collections.ienumerable接口,iteratorproduct 用此接口來向使用者提供對ienumerator接口的操作。
public class iteratorproduct : implements system.collections.ienumerable
private products as collection '用collection在存訂單中的所有產品
private item as integer = -1
public sub new()
products = new collection
products.add("xh") '這只是為了測試方便,將加入產品的內容直接寫在這了
products.add("lj")
products.add("qd")
end sub
overridable readonly property current() as object
get
return products(item)
end get
end property
public overridable function movenext() as boolean
item += 1
end function
overridable sub reset()
item = -1
end sub
' 返回迭代對像給使用者
overridable function getenumerator() as ienumerator implements ienumerable.getenumerator
return me.products.getenumerator
end function
end class
'------------------------使用類----------------------------------
private sub page_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load
dim products as iteratorproduct
products = new iteratorproduct
dim productname as string
for each productname in products
response.write(productname)
response.write("<br>")
next
end sub
輸出為:
xh
lj
qd
說明實現成功