![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
chipster45
Je précise que la " SuperClasse " ne dérive elle d'aucune classe et que " Classe1 " , " Classe2 " n'ont qu'une seule instance dans le programme.
Cela dérive forcément de TObject (c'est implicite, voir l'aide) même si tu as fais
1 2 3 4
| type
TSuperClass = class
...
end; |
"Retrouver une instance de classe par son nom ?"
Juste évite TSuperClass, comme nom, c'est réservé à la Référence de classe de TSuper ... mais je suppose que c'est juste un exemple ...
Soit Tu confonds une Instance de Classe qui est un Objet
Et une Référence de Classe qui est le "descripteur" (je ne trouve pas le bon mot) de ta Classe
Soit, tu voulais parler de Singleton, je donc traiter les deux
Pour Reférence de Class, j'ai fait exactement, la même chose pour ma couche de persistante, où dans un XML était décrit les classes de l'application, les relations entre classes, l'héritage, ... pour encaspuler la DB dans une couche Objet
Il faut recenser les classes (hérité de TPersistent) avec RegisterClass, et faire ensuite FindClass
Sinon, faire une TStringList, donc chaque objet pointe en fait une TClass ... et non une instance
Pour Instance de Classe, un singleton ...
il te suffit ce faire une méthode de classe abtraite dans Super
class function GetInstance: TSuper; virtual; abstract
et dans les sous classes
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
|
interface
class function GetInstance: TSuper; override;
implementation
var
_SingletonMaClasse1: TMaClasse1 = nil;
class function TMaClasse1.GetInstance: TSuper;
begin
if not Assigned(_SingletonMaClasse1) then
_SingletonMaClasse1 := TMaClasse1.Create();
Result := _SingletonMaClasse1;
end;
initialization
// _SingletonMaClasse1 := TMaClasse1.Create();
finalization
if Assigned(_SingletonMaClasse1) then
begin
_SingletonMaClasse1.Free();
_SingletonMaClasse1 := nil;
end; |
tu peux aussi faire une propriété publiée, mais il te faudra tout de même avoir une variable globale derrière
PS : Si tu as Delphi 2006, ils ont ajouté les variables de classes, il me semble, tu devrais voir cela, si tu as Delphi 7 ou moins, mon code remplacera cette grosse lacune
Partager