Поделиться через


Привязки do в классах

Привязка do в определении класса выполняет действия при создании объекта или для статической do привязки при первом использовании типа.

Синтаксис

[static] do expression

Замечания

Привязка do отображается вместе с привязками или после let нее, но перед определениями элементов в определении класса. do Хотя ключевое слово является необязательным для привязок на уровне модуля, он не является необязательным для dodo привязок в определении класса.

Для построения каждого объекта любого типа нестатические привязки и нестатические dolet привязки выполняются в том порядке, в котором они отображаются в определении класса. Несколько do привязок могут выполняться в одном типе. Нестатические привязки и нестатические letdo привязки становятся телом основного конструктора. Код в разделе нестатических do привязок может ссылаться на основные параметры конструктора и любые значения или функции, определенные в let разделе привязок.

Нестатические do привязки могут получить доступ к членам класса, если класс имеет идентификатор, определенный as ключевое слово в заголовке класса, и до тех пор, пока все использование этих элементов квалифицированы с помощью самоиндендного идентификатора класса.

Так как let привязки инициализируют частные поля класса, которые часто необходимы для обеспечения правильного поведения элементов, привязки обычно помещаются после let привязок, do чтобы код в do привязке может выполняться с полностью инициализированным объектом. Если код пытается использовать элемент до завершения инициализации, вызывается исключение InvalidOperationException.

Статические do привязки могут ссылаться на статические члены или поля включающего класса, но не элементы экземпляра или поля. Статические do привязки становятся частью статического инициализатора для класса, который гарантированно выполняется до первого использования класса.

Атрибуты игнорируются для do привязок в типах. Если атрибут требуется для кода, выполняемого do в привязке, он должен применяться к основному конструктору.

В следующем коде класс имеет статическую привязку и нестатическую dodo привязку. Объект имеет конструктор с двумя параметрами, a а bдва частных поля определяются в let привязках класса. Также определены два свойства. Все они находятся в область в разделе нестатических do привязок, как показано в строке, которая выводит все эти значения.

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)

Выходные данные выглядят следующим образом.

Initializing MyType.
Initializing object 1 2 2 4 8 16

См. также