bonjour
c'est quoi une "class Function"?
en Quoi est ce utiles ?
merci
bonjour
c'est quoi une "class Function"?
en Quoi est ce utiles ?
merci
Bonjour,
"class function" est une écriture permettant de déclarer une méthode comme étant une "méthode de classe". Cela signifie que la méthode ne s'applique pas une instance de la classe mais à la classe elle-même.
Ainsi pour appeler une méthode de classe on écrit : TMaClasse.MaMethode au lieu d'écrire généralement : AVar: TMaClasse; AVar.MaMethode.
En outre à l'intérieur d'une méthode de classe, tu n'as pas accès aux membres ou aux méthodes qui ne sont pas de classe. L'intérêt est donc ici d'écrire des traitements qui ne nécessite pas d'utiliser les membres de la classe mais qui ont tout de même un rapport avec la sémantique de la classe.
La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème
Pas de sollicitations techniques par MP -
Le concept des méthodes de classe peut s'approcher la plupart du temps du concept de routines (soit des procédures et fonctions simples).
Un exemple trivial de la multiplication
version objet
version méthode de classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 TMultiplication = class protected FOperande1: Integer; FOperande2: Integer; public function Multiplier: Integer; property Operande1: Integer read FOperande1 write FOperande1; property Operande2: Integer read FOperande2 write FOperande2; end; function TMultiplication.Multiplier: Integer; begin Result := FOperande1 * FOperande2; end; // Utilisation var v: TMultiplication; begin v := TMultiplication.Create; v.Operande1 := 2; v.Operande2 := 4; ShowMessage( IntToStr( v.Multiplier ) ); v.Free; end;
Bon l'exemple est très trivial est ne montre pas vraiment une bonne utilisation des méthodes de classe mais dans l'esprit il faut conceptualiser cela comme étant des traitements qui ne s'appliquent pas à une instance particulière d'un objet mais de manière globale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 TMultiplication = class public class function Multiplier( const AOperande1, AOperande2: Integer ): Integer; end; classfunction TMultiplication.Multiplier( const AOperande1, AOperande2: Integer ): Integer; begin Result := AOperande1 * AOperande2; end; // Utilisation begin ShowMessage( IntToStr( TMultiplication.Multiplier( 2, 4 ) ) ); end;
La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème
Pas de sollicitations techniques par MP -
J'ai utilisé cette technique lors de la création d'un designer.
Les types d'objet utilisables (les classes) sont énumérés dans une liste et plutôt que de gérer une deuxième liste avec leur description, le texte en clair est récupéré directement par une méthode de classe.
(Il y avait d'autres méthodes pour renvoyer une image, etc.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48 type TBaseClass = class of TBase; TBase = class class function Description :string; virtual; abstract; end; TClass1 = class(TBase) class function Description :string; override; end; TClass2 = class(TBase) class function Description :string; override; end; var ClassList : array[0..1] of TBaseClass = ( TClass1, TClass2 ); implementation {$R *.dfm} { TClass1 } class function TClass1.Description: string; begin Result := 'Description de la class1'; end; { TClass2 } class function TClass2.Description: string; begin Result := 'Description de la class2'; end; procedure TForm2.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to High(ClassList) do ListBox1.Items.Add(ClassList[i].Description); end; end.
Pour une fois, l'ordre n'a pas d'importance . Il ne s'agit que d'un pointer sur la class. Au même titre, je peux écrire quelque chose comme ceci:
L'avantage de le définir avant est dans ce genre d'imbrication:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PRec = ^TRec; TRec = record ... end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 type TBaseClass = class of TBase; TBase = class procedure CreateChild(aChildClass :TBaseClass); class function Description :string; virtual; abstract; end;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager