tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
795
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    marko marko ist offline Mitglied
    Registriert seit
    Nov 2003
    Ort
    Wallenhorst
    Beiträge
    15
    Hiho!!

    Ich habe folgendes Problem:

    Um meinen Code ein wenig schlanker zu halten möchte ich nicht die Komplette Funktion 3 mal schreiben sondern auf eine Variable je nach bedarf verschiedene Klassenreferenzen zuweisen und dann mit dieser einen Variable weiter arbeiten.

    Zur Veranschaulichung:

    type
    a = class(TObject);
    b = class(TObject);
    c = class(TObject);

    var
    Klassenvariable : (was auch immer hier stehen muss)

    begin
    case x of
    1: Klassenvariable := a;
    2: Klassenvariable := b;
    3: Klassenvariable := c;
    end;

    Klassenvariable.Create(Self);
    Klassenvariable.doSomething;
    Klassenvariable.Free;
    end;

    Ich hoffe jemand von euch kann mir da kurz auf die Sprünge helfen.

    Mfg
    Marko
     
    Für alle Probleme gibt es eine Lösung

    Nur über den Zeitansatz sollten wir uns mal unterhalten :-)

  2. #2
    Avatar von Thomas Pinske
    Thomas Pinske Thomas Pinske ist offline Mitglied Silber
    Registriert seit
    Jun 2003
    Ort
    Bingen (RLP)
    Beiträge
    56
    Hört sich so an, als ob sich hierfür eine Basisklasse eignet, in der die in allen drei Klassen vorhandene Methode implementiert ist. Also in etwa so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    type
      TBasisklasse = class(TObject)
        ...
        procedure doSomething; virtual;
      end;
      a = class(TBasisklasse)
        ...
      end;
      b = class(TBasisklasse)
        ...
      end;
      c = class(TBasisklasse)
        ...
      end;
     
    var
      Objektreferenz: TBasisklasse;
     
    begin
      Objektrefernz := TBasisklasse.Create;
      Objektrefernz.doSomething;
      Objektrefernz.Free;
    end;

    Ansonsten gibt es noch die Möglichkeit einer echten Klassenreferenz, aber auch hier benötigst Du eine Basisklasse, die die Methode einführt. Die Methode muss dann in den anderen Klassen überschrieben werden, um die eigentliche Funktionalität zu implementieren. Beim Ausführen wird dann die zur zugewiesenen Klasse gehörende Methode ausgeführt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    type
      basis = class(TObject)
        ...
        procedure doSomething; virtual;
      end;
      a = class(basis)
        ...
        procedure doSomething; override;
      end;
      b = class(basis)
        ..
        procedure doSomething; override;
      end;
      c = class(basis)
        ...
        procedure doSomething; override;
      end;
      TKlasse = class of basis;
     
    var
      Klassenreferenz: TKlasse;
      Objektreferenz: basis;
     
    begin
      case x of
        0: Klassenreferenz := a;
        1: Klassenreferenz := b;
        2: Klassenreferenz := c;
      end;
     
      Objektreferenz := Klassenreferenz.Create;
      Objektreferenz.doSomething;
      Objektreferenz.Free;
    end;
     

  3. #3
    marko marko ist offline Mitglied
    Registriert seit
    Nov 2003
    Ort
    Wallenhorst
    Beiträge
    15
    Vielen Dank für deine Antwort.

    Letztere Möglichkeit mit dem "virtual; abstract;" habe ich in der zwischenzeit schon umgesetzt.

    Was mir nicht wieder eingefallen war ist die Typendefinition:
    cMyClass = Class of TObject;

    Gruß
    Marko
     
    Für alle Probleme gibt es eine Lösung

    Nur über den Zeitansatz sollten wir uns mal unterhalten :-)

Ähnliche Themen

  1. Letzter Eintrag eine anderen Klasse zuweisen?
    Von Identität im Forum PHP
    Antworten: 5
    Letzter Beitrag: 27.05.09, 13:52
  2. Member-Variable einer MFC-Klasse in einfache Klasse einfügen
    Von cappa555 im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 12.12.08, 17:33
  3. php Variable Rückgabewert aus JS zuweisen
    Von schecker im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 15.11.05, 15:54
  4. Wert einer Variable zuweisen
    Von izb im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 01.07.04, 10:04
  5. Variable Dateiinhalt zuweisen? Wie?
    Von BigFacker im Forum PHP
    Antworten: 5
    Letzter Beitrag: 13.04.02, 16:07