German Wie kann ich einer Variablen unterschiedliche Klassen zuordnen?

Discussion in 'German Forum' started by Knoppi, Jun 13, 2018.

  1. Knoppi

    Knoppi Active Member Licensed 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.
    Code:
    If Version=1 then
      
    Dim Klasse as ClassVersion1
    else
      
    Dim Klasse as ClassVersion2
    End If
    Log( Klasse.Version)
     
  2. MarkusR

    MarkusR Well-Known Member Licensed 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.
    Code:
    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
     
  3. Knoppi

    Knoppi Active Member Licensed 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.

    Code:
    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
    LogCallSub( Klasse.Get( Version), "Version"))
    LogCallSub3( Klasse.Get( Version), "Get_Year_Map""2018", liMonate))

    Version = 
    1
    LogCallSub( Klasse.Get( Version), "Version"))
    LogCallSub3( Klasse.Get( Version), "Get_Year_Map""2018", liMonate))
     
  4. MarkusR

    MarkusR Well-Known Member Licensed 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.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice