Hallo zusammen
Im Anhang sind alle 3 benötigten Klassen auscodiert. clsTerrain ist die Objekt-Klasse. Diese Klasse wird in clsTerrainList n-mal instanziert. Da es mehrere Klassen mit einem ähnlichen Design gibt, erbt clsTerrainList von der Klasse clsList. Dies sind die ‚Standard‘-Funktionen wie Count, Remove, etc. Um auf ein Item über den Namen zugreifen zu können, habe ich in clsList die Funktion Item eingefügt. Hier ist auch das Problem: Da clsList eine generische Klasse ist, weiss diese nicht, dass jede Objekt-Klasse das Property Name kennt. Deshalb gibt der Compiler einen Fehler aus. (Im Code fett markiert)
Wie kann ich dieses Problem beheben? Oder ist etwa mein Ansatz falsch?
Danke für eure Hilfe…
_
Public Class clsTerrain
Protected mobjMainClass As Main = Nothing
Private mstrName As String = String.Empty
Public Sub New(ByRef MainClass As Main)
mobjMainClass = MainClass
End Sub
Protected Overrides Sub Finalize()
mobjMainClass = Nothing
MyBase.Finalize()
End Sub
Public Property Name() As String
Get
Return mstrName
End Get
Set(ByVal Value As String)
mstrName = Value
End Set
End Property
End Class
_
Public Class clsTerrainList
Inherits clsList(Of clsTerrain)
Public Sub New(ByRef MainClass As Main)
MyBase.New(MainClass)
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub
Public Function Add(ByVal Name As String) As clsTerrain
Dim obj As clsTerrain = Nothing
Try
If MyBase.Item(Name) Is Nothing Then
obj = New clsTerrain(MyBase.mobjMainClass)
obj.Name = Name
MyBase.mobjList.Add(obj)
End If
Return MyBase.Item(Name)
Catch ex As Exception
MyBase.mobjMainClass.RaiseComponentError(ex.Message, Me.GetType.Name)
Return Nothing
End Try
End Function
End Class
_
Public MustInherit Class clsList(Of T As Class)
Protected mobjMainClass As Main = Nothing
Protected mobjList As List(Of T) = New List(Of T)
Public Sub New(ByRef MainClass As Main)
mobjMainClass = MainClass
End Sub
Protected Overrides Sub Finalize()
Call RemoveAll()
mobjList = Nothing
mobjMainClass = Nothing
MyBase.Finalize()
End Sub
Public Function Count() As Integer
Return mobjList.Count
End Function
Public Sub Remove(ByVal Index As Integer)
mobjList.RemoveAt(Index)
End Sub
Public Sub Remove(ByVal Key As String)
mobjList.Remove(Item(Key))
End Sub
Public Sub RemoveAll()
mobjList.Clear()
End Sub
Public Function Item(ByVal Key As String) As T
Return mobjList.Find(Function(f As T) f.Name = Key)
End Function
Public Function Item(ByVal Index As Integer) As T
Return mobjList.Item(Index)
End Function
End Class