CREATE STATIC
CREATE STATIC
Ces mots-clés, placés seuls au début d'un fichier de classe, disent à l'interpréteur qu'en appliquant des symboles non-statiques au nom de la classe, une instance cachée automatique de celle-ci sera créée à la volée.
Si vous utilisez cette fonctionnalité, le constructeur de classe (La méthode spéciale _new
) sera appelé sans paramètre.
Cette fonctionnalité est déjà utilisée en interne dans les classes
Form et
Settings.
Voici un extrait du code de la classe
Settings :
Exemple : Settings.class (gb.settings)
Export
Create Static
' ...
Public Sub _new(Optional Path As String, Optional Title As String)
' ...
If Not Path Then
Path = Settings.DefaultDir &/ Application.Name & ".conf"
Explication
Considérez cette ligne de code Gambas :
Print Settings["Key"]
Il semble que la méthode d'accès au tableau
_get() soit appliquée à la
classe Settings pour obtenir la valeur correspondant à la clé "Key", mais cela n'a pas de sens car la méthode _get() de Settings n'est pas
static mais dynamique, c'est-à-dire qu'elle n'appartient pas à la classe mais à un objet de la classe. Mais puisque Settings est CREATE STATIC, l'interpréteur va créer l'instance automatique de la classe Settings en coulisse et utiliser cet objet pour l'accès au tableau.
L'instance automatique de Settings est, comme expliqué ci-dessus, construite sans arguments. Dans l'extrait de code Settings.class ci-dessus, vous voyez que dans ce cas,
Path est défini comme le chemin du fichier de configuration par défaut
Settings.DefaultDir &/ Application.Name & ".conf"
.
En conclusion, chaque fois que vous utilisez le nom de classe "Settings" comme un objet (en utilisant des symboles dynamiques sur celui-ci), vous utilisez en fait l'instance automatique cachée de la classe Settings, qui est liée au fichier de configuration par défaut.
[A PART] "Singletons"
Cette fonctionnalité, associée à
CREATE PRIVATE, peut être utilisée pour mettre en œuvre le de la programmation orientée objet (http://en.wikipedia.org/wiki/Singleton_pattern). CREATE STATIC vous permet d'utiliser un nom de classe comme un objet, tandis que CREATE PRIVATE rend la classe non instanciable (sauf pour l'instance automatique).
Au lieu d'une classe CREATE STATIC + CREATE PRIVATE, vous pouvez aussi utiliser efficacement un
module en Gambas !
Voir aussi