German Wie kann ich einer Variablen unterschiedliche Klassen zuordnen?

Knoppi

Active Member
Licensed User
Longtime User
Wie kann ich einer Variablen unterschiedliche Klassen zuordnen?

Ich möchte so etwas wie hier machen, da beide Klassen gleiche Methoden haben aber auf unterschiedliche Daten zugreifen wäre eine solche Zuweisung echt praktisch.
B4X:
If Version=1 then
  Dim Klasse as ClassVersion1
else
  Dim Klasse as ClassVersion2
End If
Log( Klasse.Version)
 

MarkusR

Well-Known Member
Licensed User
Longtime User
ich glaube da würde ich eine dritte Klasse machen welche dann die versions abhängige Methode/Sub/Funktion aufruft.
in c# hättest du da zwei Klassen die sich ein Interface teilen.

man kann zwar alles in ein Object ablegen aber dann kennt der compiler nicht welche methoden es haben könnte zur laufzeit darum müßte man es wieder
zurück wandeln und damit ist dir wohl auch nicht geholfen.
B4X:
    Dim Klasse As Object
    Dim Klasse1 As Class1
    Dim Klasse2 As Class2
    If 1=0 Then
        Klasse1.Initialize
        Klasse = Klasse1
    Else
        Klasse2.Initialize
        Klasse = Klasse2
    End If
    If Klasse Is Class1 Then
        Dim Cast1 As Class1
        Cast1 = Klasse
        Log(Cast1.Version)  
    End If
    If Klasse Is Class2 Then
        Dim Cast2 As Class2
        Cast2 = Klasse
        Log(Cast2.Version)
    End If
 

Knoppi

Active Member
Licensed User
Longtime User
Nachtrag:
Ich habe eine Lösung für mein Problem gefunden.

Nachdem ich mein Problem länger aufgeschoben habe da es nicht so dringend war hier nun eine Lösungsmöglichkeit
Der Trick ist die Klassen in eine Liste zu packen.
und sie dann mit 'CallSub' aufzurufen.
Der Listenindex ist dann meine Versionsnummer.

B4X:
Dim Klasse1 As class1
Klasse1.Initialize

Dim Klasse2 As class2
Klasse2.Initialize

Dim Klasse As List
Klasse.Initialize
Klasse.Add( Klasse1)
Klasse.Add( Klasse2)

Dim Version As Int
Dim liMonate As List
liMonate.Initialize2( Array As Int( 1,2,3))

Version = 0
Log( CallSub( Klasse.Get( Version), "Version"))
Log( CallSub3( Klasse.Get( Version), "Get_Year_Map", "2018", liMonate))

Version = 1
Log( CallSub( Klasse.Get( Version), "Version"))
Log( CallSub3( Klasse.Get( Version), "Get_Year_Map", "2018", liMonate))
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Ich glaube wenn diese Functionen dort nicht sind geht der Aufruf ins leere. Ist mir jedenfalls mit CallSubDelay passiert das war dann doof zu finden.
Vielleicht nutze noch SubExists dabei.
 
Top