Compartir a través de


do Bindings in Classes

Un do enlace de una definición de clase realiza acciones cuando se construye el objeto o, para un enlace estático do , cuando se usa el tipo por primera vez.

Sintaxis

[static] do expression

Observaciones

Un do enlace aparece junto con los enlaces o después let , pero antes de las definiciones de miembro en una definición de clase. Aunque la do palabra clave es opcional para do los enlaces en el nivel de módulo, no es opcional para do los enlaces de una definición de clase.

Para la construcción de cada objeto de cualquier tipo determinado, los enlaces no estáticos y los enlaces no estáticos dolet se ejecutan en el orden en que aparecen en la definición de clase. Pueden producirse varios do enlaces en un tipo. Los enlaces no estáticos y los enlaces no estáticos letdo se convierten en el cuerpo del constructor principal. El código de la sección enlaces no estáticos do puede hacer referencia a los parámetros del constructor principal y a los valores o funciones que se definen en la let sección enlaces.

Los enlaces no estáticos do pueden tener acceso a los miembros de la clase siempre que la clase tenga un identificador propio definido por una as palabra clave 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 let que los enlaces inicializan los campos privados de una clase, que a menudo es necesario para garantizar que los miembros se comporten según lo esperado, do los enlaces suelen colocarse después let de los enlaces para que el código del do enlace se pueda ejecutar con un objeto totalmente inicializado. Si el código intenta usar un miembro antes de que se complete la inicialización, se genera una excepción InvalidOperationException.

Los do enlaces estáticos pueden hacer referencia a miembros estáticos o campos de la clase envolvente, pero no a miembros o campos de instancia. Los enlaces estáticos do forman parte del inicializador estático de la clase , que se garantiza que se ejecute antes de que se use la clase por primera vez.

Los atributos se omiten para do los enlaces en tipos. Si se requiere un atributo para el código que se ejecuta en un do enlace, debe aplicarse al constructor principal.

En el código siguiente, una clase tiene un enlace estático do y un enlace no estático do . El objeto tiene un constructor que tiene dos parámetros, a y b, y dos campos privados se definen en los let enlaces de la clase . También se definen dos propiedades. Todos estos están en el ámbito de la sección enlaces no estáticos do , 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