Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une do liaison dans une définition de classe effectue des actions lorsque l’objet est construit ou, pour une liaison statique do , lorsque le type est utilisé pour la première fois.
Syntaxe
[static] do expression
Remarques
Une do liaison s’affiche avec ou après let des liaisons, mais avant les définitions de membres dans une définition de classe. Bien que le do mot clé soit facultatif pour do les liaisons au niveau du module, il n’est pas facultatif pour do les liaisons dans une définition de classe.
Pour la construction de chaque objet d’un type donné, les liaisons non statiques do et les liaisons non statiques let sont exécutées dans l’ordre dans lequel elles apparaissent dans la définition de classe. Plusieurs do liaisons peuvent se produire dans un type. Les liaisons non statiques let et les liaisons non statiques do deviennent le corps du constructeur principal. Le code de la section liaisons non statiques do peut référencer les paramètres du constructeur principal et toutes les valeurs ou fonctions définies dans la let section liaisons.
Les liaisons non statiques do peuvent accéder aux membres de la classe tant que la classe a un auto-identificateur défini par un as mot clé dans le titre de classe, et tant que toutes les utilisations de ces membres sont qualifiées avec l’identificateur automatique de la classe.
Étant donné que let les liaisons initialisent les champs privés d’une classe, ce qui est souvent nécessaire pour garantir que les membres se comportent comme prévu, do les liaisons sont généralement placées après let les liaisons afin que le code de la do liaison puisse s’exécuter avec un objet entièrement initialisé. Si votre code tente d’utiliser un membre avant la fin de l’initialisation, une exception InvalidOperationException est déclenchée.
Les do liaisons statiques peuvent référencer des membres statiques ou des champs de la classe englobante, mais pas des membres ou des champs d’instance. Les liaisons statiques do font partie de l’initialiseur statique pour la classe, qui est garantie d’être exécutée avant que la classe ne soit utilisée pour la première fois.
Les attributs sont ignorés pour do les liaisons dans les types. Si un attribut est requis pour le code qui s’exécute dans une do liaison, il doit être appliqué au constructeur principal.
Dans le code suivant, une classe a une liaison statique do et une liaison non statique do . L’objet a un constructeur qui a deux paramètres et abdeux champs privés sont définis dans les let liaisons de la classe. Deux propriétés sont également définies. Toutes ces valeurs sont comprises dans la section liaisons non statiques do , comme illustré par la ligne qui imprime toutes ces valeurs.
open System
type MyType(a: int, b: int) as this =
inherit Object()
let x = 2 * a
let y = 2 * b
do printfn "Initializing object %d %d %d %d %d %d" a b x y (this.Prop1) (this.Prop2)
static do printfn "Initializing MyType."
member this.Prop1 = 4 * x
member this.Prop2 = 4 * y
override this.ToString() =
System.String.Format("{0} {1}", this.Prop1, this.Prop2)
let obj1 = new MyType(1, 2)
La sortie est la suivante.
Initializing MyType.
Initializing object 1 2 2 4 8 16