ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
795
795
EMPFEHLEN
-
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
MarkoFür alle Probleme gibt es eine Lösung
Nur über den Zeitansatz sollten wir uns mal unterhalten :-)
-
22.03.08 13:21 #2
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;
-
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ß
MarkoFür alle Probleme gibt es eine Lösung
Nur über den Zeitansatz sollten wir uns mal unterhalten :-)
Ähnliche Themen
-
Letzter Eintrag eine anderen Klasse zuweisen?
Von Identität im Forum PHPAntworten: 5Letzter Beitrag: 27.05.09, 13:52 -
Member-Variable einer MFC-Klasse in einfache Klasse einfügen
Von cappa555 im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 12.12.08, 17:33 -
php Variable Rückgabewert aus JS zuweisen
Von schecker im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 15.11.05, 15:54 -
Wert einer Variable zuweisen
Von izb im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 01.07.04, 10:04 -
Variable Dateiinhalt zuweisen? Wie?
Von BigFacker im Forum PHPAntworten: 5Letzter Beitrag: 13.04.02, 16:07





Zitieren
Login





