熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VB.NET中實現IEnumerator接口

2022-06-13   來源: .NET編程 

  在面向對象的設計中經常會用到有類似父子關系的這個對象比如在我現在的一個項目中有訂單對象在一個訂單下又包含多個產品這時我就想用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 SystemCollections
  
  在此實際實現的是SystemCollectionsIEnumerable接口IteratorProduct 用此接口來向使用者提供對IEnumerator接口的操作
  
  Public Class IteratorProduct : Implements SystemCollectionsIEnumerable
  Private Products As Collection     用Collection在存訂單中的所有產品
  Private item As Integer =
  
  Public Sub New()
  Products = New Collection
  ProductsAdd(xh)          這只是為了測試方便將加入產品的內容直接寫在這了
  ProductsAdd(lj)
  ProductsAdd(qd)
  End Sub
  
  Overridable ReadOnly Property Current() As Object
  Get
  Return Products(item)
  End Get
  End Property
  
  Public Overridable Function MoveNext() As Boolean
  item +=
  End Function
  
  Overridable Sub Reset()
  item =
  End Sub
  
    返回迭代對像給使用者
  
  Overridable Function GetEnumerator() As IEnumerator Implements IEnumerableGetEnumerator
  Return MeProductsGetEnumerator
  End Function
  
  End Class
  
  使用類
  
  Private Sub Page_Load(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles MyBaseLoad
  Dim Products As IteratorProduct
  Products = New IteratorProduct
  Dim ProductName As String
  For Each ProductName In Products
  ResponseWrite(ProductName)
  ResponseWrite(<br>)
  Next
  End Sub
  
  輸出為:
  
  xh
  lj
  qd
  說明實現成功
From:http://tw.wingwit.com/Article/program/net/201311/13669.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.