Funktionen oder Klassen mit unbekanntem Namen verwenden

22/10/2008 - 15:18 von Andreas Schädler | Report spam
Hallo NG


Frage 1:
In meiner Klasse gibt es die Privaten Funktionen V1, V2 bis Vn vom Typ
Boolean.
In einer Public Function derselben Klasse möcht ich die Privaten Funktionen
nacheinander aufrufen. Einfach geschreiben
For i as Integer = 1 To n
retVal = V(i)
Next
wobei V(i) für den Privaten Funktionsnamen steht.
Wie kann anhand des als String zusammengesetzten Funktionsnamen die Funktion
selbst angesprochen werden?

Frage 2:
Wenn V1, V2 bis Vn an Stelle von Funktionen Klassen derselben Komponente
wàren, wie könnte ich anhand des zusammengesetzten Namens die Klassen
instanzieren? (Die Klassen würden eine bestimmte Schnittstelle implementieren)
Dim ob As ImeineSchnittstelle = new ????? ("V1")

Vielen Dank und Gruss
Andreas
 

Lesen sie die antworten

#1 Armin Zingler
22/10/2008 - 16:11 | Warnen spam
"Andreas Schàdler" schrieb
Hallo NG


Frage 1:
In meiner Klasse gibt es die Privaten Funktionen V1, V2 bis Vn vom
Typ Boolean.
In einer Public Function derselben Klasse möcht ich die Privaten
Funktionen nacheinander aufrufen. Einfach geschreiben
For i as Integer = 1 To n
retVal = V(i)
Next
wobei V(i) für den Privaten Funktionsnamen steht.



Warum nicht
retval = V1
retval = V2
retval = V3
? Du kennst die Namen doch schon zur Entwurfszeit.

Wie kann anhand des als String zusammengesetzten Funktionsnamen die
Funktion selbst angesprochen werden?



Theoretisch über Reflection. Das ist jedoch ein Umweg und dadurch langsamer
als der direkte Aufruf. Solange die Namen zur Entwurfszeit bekannt sind,
sehe ich dafür keinen Grund. Faulheit beim Tippen würde ich persönlich nicht
als einen akzeptieren.


Frage 2:
Wenn V1, V2 bis Vn an Stelle von Funktionen Klassen derselben
Komponente wàren,



Was sind Klassen derselben Komponente? Verschachtelte Klassen?

wie könnte ich anhand des zusammengesetzten Namens
die Klassen instanzieren? (Die Klassen würden eine bestimmte
Schnittstelle implementieren)
Dim ob As ImeineSchnittstelle = new ????? ("V1")



Theoretisch mit Activator.CreateInstance. Aber wie ich schon oben schrieb,
solange das auch mit direkten Mitteln geht (evtl Select Case), rate ich
davon ab. Warum liegt der Name nur als String vor?

Gerne wird heutzutage vergessen, dass Namen nur für den Programmierer
relevant sind und beim Kompilieren aufgelöst werden. Deshalb sollte man sich
zur Laufzeit auch nicht mehr mit ihnen beschàftigen. Ausnahmen bestàtigen...


Armin

Ähnliche fragen