Constante de classe [Résolu]

Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 14 août 2008 à 18:47 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 15 août 2008 à 15:59
Salut a tous,
Mon problème n'est pas un problème, c'est plutôt un avis a vous demander.
J'ai une classe mère TMere qui fait un paquet de traitements, dont certains qui dépendent d'une valeur. Cette valeur est propre à chaque classe fille de TMere. Pour récupérer cette valeur, j'ai fait une class function abstract dans ma classe mere.
Ca me donne en gros le code suivant :

TMere = class
protected
  class function EtatMax: integer; virtual; abstract;
end;

TFils1 = class(TMere)

protected

  class function EtatMax: integer; override;

end;

TFils2 = class(TMere)

protected

  class function EtatMax: integer; override;

end;

...

class function TFils1.EtatMax: integer;

begin

  Result := 2;

end;

class function TFils2.EtatMax: integer;

begin

  Result := 3;

end;

et perso, je trouve ca un peu pas terrible. Les constantes de classe n'ayant pas l'air d'exister dans mon D7.
Existent-elles mais je ne les ai pas trouvées? sont elles arrivées dans les versions suivantes?
y a t'il une solution plus propre?

Merci de votre aide / avis
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 15 août 2008 à 15:59
3
Merci
alors oui les constantes de classes sont possible dans D2007 et pas dans D7. surrement faisable depuis D2005/D2006.

Le gros avantage de la propriété en lecture seule me semble mieux qu'une fonction puisque tout comme la fonction tu peu ne pas definir (override) la fonction et surtout tu evite un call.

aprés, l'un comme l'autre, c'est kif kif.

<hr size="2" width="100%" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de f0xi
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 15 août 2008 à 02:48
0
Merci
type
  TMaman = class
  private
    fEtatMax: integer;
  public

    const Etat : integer = 0;
// Delphi 2007


    property EtatMax: integer read fEtatMax default 0;

    constructor Create; virtual;
  end;

  TFilsA = class(TMaman)
  public

    const Etat : integer = 1;
// Delphi 2007


    property EtatMax default 3;
  public

    constructor Create; override;
  end;

  TFilsB = class(TMaman)
  public

    const Etat : integer = 2; // Delphi 2007

    property EtatMax default 2;
  public
    constructor Create; override;
  end;

{ TMaman }

constructor TMaman.Create;
begin
  fEtatMax := 0;
end;

{ TFilsA }

constructor TFilsA.Create;
begin
  inherited Create;
  fEtatMax := 3;
end;

{ TFilsB }

constructor TFilsB.Create;
begin
  inherited Create;
  fEtatMax := 2;
end;




<hr size="2" width="100%" />
Commenter la réponse de f0xi
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 15 août 2008 à 14:07
0
Merci
ce que j'aime bien avec tes reponses foxi, c'est que c'est toujours que du code, pas un mot
la en gros, tu me dit que, dans D2007, tu peux mettre des constantes de classe, et que sinon (autre solution en D7), je peux mettre une variable dans maman que j'initialise dans le create des enfants. Ca revient un peu a ma solution, sauf que je prefere la mienne qui me force à definir la valeur, alors qu'avec la tienne, rien ne t'empeche de ne pas initialiser fEtatMax dans un fils.

par contre, tu semble me confirmer que les const de classe sont pas possibles dans D7.
Merci.
Commenter la réponse de Guillemouze

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.