Pourquoi dans le code ci-dessous, j'obtiens le message "Échec" plutôt que "Réussi"La procédure de classe de classe de base doit instancier l'objet d'un descendant?
Contexte: J'aime utiliser des procédures de classe qui instancient leur objet propriétaire, font quelque chose, puis le libèrent.
Cependant, cette approche ne fonctionne pas si j'ai un objet descendant:
Toutes les suggestions sur la façon de fournir des procédures de classe dans une classe de base qui peut être appelé comme un enfant? Est-ce que je pense à tort?
Type
TBase = class(TObject)
Protected
Procedure Proc1; Virtual;
Public
Class Procedure MyClassProc;
end;
Class Procedure TBase.MyClassProc;
Var
Base: TBase;
begin
Base := TBase.Create;
Base.Proc1;
Base.Free;
end;
Procedure TBase.Proc1;
begin
Assert(FALSE, 'Failed');
end;
type
TChild = class(TBase)
protected
Procedure Proc1; Override;
end;
Procedure TChild.Proc1;
begin
ShowMessage('Succeeded');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TChild.MyClassProc;
end;
@mghie: Bonjour! Au début, j'ai une question comme ça! Laissez-moi vous expliquer: J'ai fait un formulaire de base pour lister certaines propriétés dans le code inspect, avec différentes formes héritées, une de ces propriétés était le type de formulaire qui était enregistré statiquement dans le fichier .FRM et je ne savais pas quel genre de forme était de l'enregistrer dans mon usine de forme de custon. La logique de l'inscription était dans la classe de la Base Form à partager avec ses enfants. La seule façon de retrouver le type de forme était de l'instancier et de l'obtenir à partir de la forme "objet". Cordialement. –