Eigene Klasse mit ICollection und IEnumerator ausstatten

16/02/2008 - 16:49 von Manuel Weber | Report spam
Schönen Samstag zusammen,

ich möchte gerne eine ziemlich simple Klasse um die Möglichkeit bereichern
die davon instanzierten Objekte mit For Each durchlaufen zu können. Bin im
Netz auch fündig geworden, lediglich auf meine Klasse übertragen kann ich
das Vorgehen bisher nicht. Ich hoffe ihr könnt mich unterstützen so daß das
noch was wird.

Meine Klasse (bereits erweitert um die ICollection Anweisung)
_________________________________________________
Imports System.Collections

Public Class Edition
Implements ICollection

Private URL As String
Private CCount As Integer
Private DestDir As String
Private Ct As Integer

Public Sub New(ByVal sURL As String, ByVal iCount As Integer, ByVal sDestDir
As String)
Me.URL = sURL
Me.CCount = iCount
Me.DestDir = sDestDir
Ct = Ct + 1
End Sub
_________________________________________________

Nun muß ich die Klasse um die notwendigen 4 Methoden erweitern:
(dieser Teil müßte passen denke ich)
_________________________________________________
Public Sub CopyTo(ByVal myArr As Array, ByVal index As Integer) Implements
ICollection.CopyTo
End Sub

ReadOnly Property IsSynchronized() As Boolean Implements
ICollection.IsSynchronized
Get
Return False
End Get
End Property

ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
Get
Return Me
End Get
End Property

ReadOnly Property Count() As Integer Implements ICollection.Count
Get
Return Ct
End Get
End Property
_________________________________________________

Nun muß der Enumerator implementiert werden:
(Hier gibt es eine Fehlermeldung, aber ich weiß auch nicht wie das für meine
Klasse aussehen muß)
_________________________________________________
Public Function GetEnumerator() As IEnumerator Implements
ICollection.GetEnumerator
Return New Enumerator(Me)
End Function

End Class 'Beenden der Klasse "Edition", siehe oben
_________________________________________________

Nun muß noch die Enumerator-Klasse eingebaut werden:
_________________________________________________
Class Enumerator
Implements IEnumerator

Private Cursor As Integer

Sub New()
Cursor = -1
End Sub

Public Sub Reset() Implements IEnumerator.Reset
Cursor = -1
End Sub

Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
'Hier Objekte von "Edition" der Reihe nach durchlaufen
End Function

Public ReadOnly Property Current() As Object Implements IEnumerator.Current
Get
'Das aktuelle Objekt ermitteln
End Get
End Property
End Class 'Beenden der Klasse "Enumerator"
_________________________________________________

Ich hoffe ihr könnt mir helfen diese Implementation für meine doch recht
einfach gehaltene Klasse zu vervollstàndigen. Seit Mittag versuche ich das
nun, aber schön langsam bin ich mit meinem Latei und Google am Ende. Ich
habe zig Beispiele gefunden, aber keines konnte ich lauffàhig adaptieren.
Seit euch meines besten Dankes gewiss!

Gruß,

Manuel
 

Lesen sie die antworten

#1 Peter Fleischer
17/02/2008 - 08:11 | Warnen spam
"Manuel Weber" schrieb im Newsbeitrag
news:fp70na$mcq$01$

ich möchte gerne eine ziemlich simple Klasse um die Möglichkeit bereichern
die davon instanzierten Objekte mit For Each durchlaufen zu können. Bin im
Netz auch fündig geworden, lediglich auf meine Klasse übertragen kann ich
das Vorgehen bisher nicht. Ich hoffe ihr könnt mich unterstützen so daß
das noch was wird.

Meine Klasse (bereits erweitert um die ICollection Anweisung)
...
Ich hoffe ihr könnt mir helfen diese Implementation für meine doch recht
einfach gehaltene Klasse zu vervollstàndigen. Seit Mittag versuche ich das
nun, aber schön langsam bin ich mit meinem Latei und Google am Ende. Ich
habe zig Beispiele gefunden, aber keines konnte ich lauffàhig adaptieren.
Seit euch meines besten Dankes gewiss!




Hi Manuel,
im Prinzip ist deine Lösung schon richtig. Es fehlen die wesentlichsten
Zeilen, die die Elemente bereitstelle. Vermutlich hast du da einen Fehler.
Nachfolgend habe ich mal eine Mini-Demo zusammengestellt. Die Elemente
werden aus einer generischen Liste bereitgestellt.

[vb]
Option Infer On
Option Strict On

Imports System.Collections

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim l = New List(Of String)
For i = 1 To 100
l.add("Zeile " & i.ToString)
Next

Dim myEdition As New Edition(l)

Dim lb As New ListBox
Me.Controls.Add(lb)
With lb
.Dock = DockStyle.Fill
For Each itm In myEdition
.Items.Add(itm)
Next
End With

End Sub

End Class

Public Class Edition
Implements ICollection

Private l As List(Of String)

Public Sub New(ByVal liste As List(Of String))
Me.l = liste
End Sub

Public Sub CopyTo(ByVal myArr As Array, ByVal index As Integer) Implements
ICollection.CopyTo
End Sub

ReadOnly Property IsSynchronized() As Boolean Implements
ICollection.IsSynchronized
Get
Return False
End Get
End Property

ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
Get
Return Me
End Get
End Property

ReadOnly Property Count() As Integer Implements ICollection.Count
Get
Return l.Count
End Get
End Property

Public Function GetEnumerator() As IEnumerator Implements
ICollection.GetEnumerator
Return New Enumerator(l)
End Function

Class Enumerator
Implements IEnumerator

Private Cursor As Integer
Private l As List(Of String)

Sub New(ByVal l As List(Of String))
Me.l = l
Cursor = -1
End Sub

Public Sub Reset() Implements IEnumerator.Reset
Cursor = -1
End Sub

Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
Cursor += 1
Return Cursor < l.Count
End Function

Public ReadOnly Property Current() As Object Implements
IEnumerator.Current
Get
Return l.Item(Cursor)
End Get
End Property

End Class

End Class
[/vb]

Viele Gruesse

Peter

Ähnliche fragen