Hallo.
Ich stehe öfters vor dem Problem: Ich lese z.B. aus einer Datei Daten aus und erstelle daraus Objekte. Die Objekte haben alle einen gemeinsamen Basistyp.
Beim Auslesen sieht das dann meistens so aus:
Da diese Daten bei mir meist im Format
vorliegen, kann ich in der TryParse-Funktion einfach
schreiben.
Das funktioniert hier noch einigermaßen, da ich vor dem Aufrufen der Schnitzel.TryParse()-Funktion bereits weiß, dass es ein Schnitzel sein muss.
Es hat aber hier schon den Nachteil, dass man alle Funktionen von Hand aufrufen muss.
Bei meinem aktuellen Problem kann ich aber sowieso nicht vorher wissen, was es sein muss.
Deshalb hätte ich vor, nacheinander alle TryParse()-Funktionen der abgeleiteten Klassen aufzurufen.
Da habe ich im Moment folgendes im Kopf:
Das ist bereits sehr kompakt, hat aber immer noch den Nachteil, dass man die Funktion vorher kennen muss.
Es ist sicher möglich, die statischen Funktionen über Reflection aufzurufen (Über den Namen), aber das dürfte relativ langsam sein.
Deshalb meine Frage:
Gibt es einen performanten Weg, alle statischen XYZ-Funktionen aller abgeleiteter Klassen aufzurufen?
Edit:
Mir ist klar, dass man eine abgeleitete Klasse nicht dazu zwingen kann, eine statische Methode zu implementieren (wie Shared MustOverride Function).
Deshalb ist es auch nicht möglich, sicher zu sagen, dass jede abgeleitete Klasse eine solche statische Funktion hat (bei mir ist es halt der Fall). Deshalb wird es kaum direkt möglich sein, da der Compiler nicht sicherstellen kann, dass es eine solche Funktion gibt.
Ich stehe öfters vor dem Problem: Ich lese z.B. aus einer Datei Daten aus und erstelle daraus Objekte. Die Objekte haben alle einen gemeinsamen Basistyp.
Beim Auslesen sieht das dann meistens so aus:
Da diese Daten bei mir meist im Format
vorliegen, kann ich in der TryParse-Funktion einfach
schreiben.
Das funktioniert hier noch einigermaßen, da ich vor dem Aufrufen der Schnitzel.TryParse()-Funktion bereits weiß, dass es ein Schnitzel sein muss.
Es hat aber hier schon den Nachteil, dass man alle Funktionen von Hand aufrufen muss.
Bei meinem aktuellen Problem kann ich aber sowieso nicht vorher wissen, was es sein muss.
Deshalb hätte ich vor, nacheinander alle TryParse()-Funktionen der abgeleiteten Klassen aufzurufen.
Da habe ich im Moment folgendes im Kopf:
VB.NET-Quellcode
- Public Class BaseClass
- Shared TryParseTargets As New List(Of Func(Of String, TryParseResult)) From {AddressOf Schnitzel.TryParse, AddressOf Keks.TryParse}
- Public Shared Function TryParse(Source As String) As TryParseResult
- For Each i In TryParseTargets
- Dim Result = i(Source)
- If Result.Accepted Then
- Return Result
- End If
- Next
- End Function
- End Class
- Public Class Schnitzel
- Public Shared Function TryParse(Source As String) As TryParseResult
- '...
- End Function
- End Class
- 'Und mit Keks auch
Das ist bereits sehr kompakt, hat aber immer noch den Nachteil, dass man die Funktion vorher kennen muss.
Es ist sicher möglich, die statischen Funktionen über Reflection aufzurufen (Über den Namen), aber das dürfte relativ langsam sein.
Deshalb meine Frage:
Gibt es einen performanten Weg, alle statischen XYZ-Funktionen aller abgeleiteter Klassen aufzurufen?
Edit:
Mir ist klar, dass man eine abgeleitete Klasse nicht dazu zwingen kann, eine statische Methode zu implementieren (wie Shared MustOverride Function).
Deshalb ist es auch nicht möglich, sicher zu sagen, dass jede abgeleitete Klasse eine solche statische Funktion hat (bei mir ist es halt der Fall). Deshalb wird es kaum direkt möglich sein, da der Compiler nicht sicherstellen kann, dass es eine solche Funktion gibt.
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Niko Ortner“ ()