Désolé pour le titre pauvre, je suis nouveau à la POO donc je ne sais pas quel est le terme pour ce que j'ai besoin de faire. J'ai, disons, 10 objets différents qui héritent d'un objet. Ils ont une quantité et un type différents de membres de classe, mais tous ont une propriété en commun - Visible.Comment faire cette OO?
type TSObject=class(TObject);
protected
Visible:boolean;
end;
type
TObj1=class(TSObject)
private
a:integer;
...(More members)
end;
TObj2=class(TSObject)
private
b:String;
...(More members)
end;
...(Other 8 objects)
Pour chacun d'eux j'ai une variable.
var Obj1:TObj1;
Obj2:TObj2;
Obj3:TObj3;
....(Other 7 objects)
Règle 1: Seulement un objet peut être initialisé à un moment (les autres doivent être libérés) pour être visible.
Pour cette règle j'ai une variable globale
var CurrentVisibleObj:TSObject; //Because they all inherit TSObject
Enfin, il y a une procédure qui change la visibilité.
procedure ChangeObjVisibility(newObj:TSObject);
begin
CurrentVisibleObj.Free; //Free the old object
CurrentVisibleObj:=newObj; //assign the new object
CurrentVisibleObj:= ??? //Create new object
CurrentVisibleObj.Visible:=true; //Set visibility to new object
end;
Il est mon problème, je ne sais pas comment initialiser, parce que la classe dérivée est inconnue (TObj1, TObj2, Tobj3 ... Lequel?).
Comment faire?
J'ai simplifié l'explication, dans le projet il y a des TFrames ayant chacune des contrôles différents et je dois rendre visible/non visible de la même façon (en ne laissant qu'une seule trame initialisée).
Désolé encore pour le titre, je suis très nouveau à OOP.
J'ai utilisé un autre moyen en passant le type de classe. Beaucoup mieux je pense, mais ce que vous avez écrit a pris le temps de la vôtre, pour lequel je suis reconnaissant. + 1 & Accepter. –
Passer la classe à ChangeObjVisibility crée des limitations à l'initialisation par classe que vous pouvez avoir. Je préfère passer un objet déjà initialisé au lieu de passer le classtype pour cette raison. Cela rend le design un peu plus flexible. –