Generische Klasse

24/06/2008 - 17:36 von Tomasz Poplawski | Report spam
Hallo NG!

In einer Windows-Forms-Anwendung (VB) habe ich folgendes Szenario:

Die Anwendung liefert mir bestimmte Daten, die in einer Ini oder in einer
Datenbank stehen.

In der Startform kann ausgewàhlt werden, ob die Daten aus der Ini oder aus
der Datenbank geholt werden sollen.

Zum Rauslesen der Daten habe ich zwei Klassen. Eine liest die Werte aus der
Ini andere aus der Datenbank.

Zusàtzlich habe ich eine dritte Klasse (generisch), die ich als
Datenlieferant benutze.

Die Klassen IniKlasse und DbKlasse haben verschiedene Properties (z.B.
GetGeburtsdatum), die in beiden gleich heißen und in beiden auch existieren.
Ich kann also entscheiden, ob ich den Wert aus der Ini oder aus der Db
gelesen haben will.

Die dritte Klasse sieht so aus:

Private Class Klasse3(Of T)
Private _v As T

Public Sub New(ByVal O As Object)
_v = CType(O, T)
End Sub

Public ReadOnly Property V() As T
Get
Return Me._v
End Get
End Property
End Class

Mein Problem liegt jetzt darin, dass ich diese Klasse nicht instanzieren
kann.

Main Ansatz:
dim o as object
dim t as type
If True Then
o = New IniKlasse
Else
o = New DbKlasse
End If
t = o.gettype()
Dim c3 As New Klasse3(Of ???) 't kann ich hier ja nicht
angeben...geht das überhaupt so?

Wenn ich die Deklaration in der If abfrage mache, dann ist c3 natürlich auch
nur in dem if-Block gültig.

Mit Klasse3 wollte ich dann mit den Werten weiterarbeiten.

Oder ist mein Ansatz komplett falsch?

Danke im Voraus

Gruß

Tomek
 

Lesen sie die antworten

#1 Bernd Schend
24/06/2008 - 19:15 | Warnen spam
Hallo Tomasz,

ich denke, dein Ansatz ist falsch. Versuch es mal wie folgt:
1. Definiere eine abstrakte Klasse
MustInherit Class DataReader

End Class

mit allen Eigenschaften und Methoden, die den folgenden - daraus
abgeleiteten - Klassen gemeinsam sind:

Class IniReader
Inherits DataReader
End Class

Class DBReader
Inherits DataReader

End Class

Spàter kannst du dann wie folgt vorgehen (Polymorphismus làsst grüßen):
...
dim Reader as DataReader
...
If es soll von Ini-Datei gelesen werden then
Reader = new IniReader
else
Reader = new DBReader
end if


Gruß
Bernd

Ähnliche fragen