Enlaces do en clases
Un enlace do
de una definición de clase realiza acciones cuando se construye el objeto o, para un enlace do
estático, cuando se usa el tipo por primera vez.
Sintaxis
[static] do expression
Comentarios
Un enlace do
aparece junto con o después de los enlaces let
, pero antes de las definiciones de miembro en una definición de clase. Aunque la palabra clave do
es opcional para los enlaces do
en el nivel de módulo, no es opcional para los enlaces do
de una definición de clase.
Para la construcción de cada objeto de cualquier tipo determinado, los enlaces do
no estáticos y los enlaces let
no estáticos se ejecutan en el orden en que aparecen en la definición de clase. Se pueden producir varios enlaces do
en un tipo. Los enlaces let
no estáticos y los enlaces do
no estáticos se convierten en el cuerpo del constructor principal. El código de la sección enlaces do
no estáticos puede hacer referencia a los parámetros del constructor principal y a los valores o funciones que se definen en la sección de enlaces let
.
Los enlaces do
no estáticos pueden tener acceso a los miembros de la clase siempre y cuando la clase tenga un identificador propio definido por una palabra clave as
en el encabezado de clase y, siempre y cuando todos los usos de esos miembros estén calificados con el identificador propio de la clase.
Dado que los enlaces let
inicializan los campos privados de una clase, que a menudo es necesario para garantizar que los miembros se comporten según lo previsto, los enlaces do
suelen colocarse después de los enlaces let
para que el código del enlace do
pueda ejecutarse con un objeto completamente inicializado. Si el código intenta usar un miembro antes de que se complete la inicialización, se genera una excepción InvalidOperationException.
Los enlaces do
estáticos pueden hacer referencia a campos o miembros estáticos de la clase envolvente, pero no a miembros o campos de instancia. Los enlaces do
estáticos forman parte del inicializador estático de la clase, que se garantiza que se ejecute antes de usar el tipo por primera vez.
Los atributos se omiten para los enlaces do
en tipos. Si se requiere un atributo para el código que se ejecuta en un enlace do
, se debe aplicar al constructor principal.
En el código siguiente, una clase tiene un enlace do
estático y un enlace do
no estático. El objeto tiene un constructor que tiene dos parámetros, a
y b
, y dos campos privados se definen en los enlaces let
de la clase. También se definen dos propiedades. Todos ellos están en el ámbito de la sección enlaces do
no estáticos, como se muestra en la línea que imprime todos esos valores.
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 salida es la siguiente.
Initializing MyType.
Initializing object 1 2 2 4 8 16
Consulte también
- Miembros
- Clases
- Constructores
let
Bindings in Classes (Enlaceslet
en clases)do
Enlaces