Привязки do в классах
Привязка do
в определении класса выполняет действия при создании объекта или для статической do
привязки при первом использовании типа.
Синтаксис
[static] do expression
Замечания
Привязка do
отображается вместе с привязками или после let
нее, но перед определениями элементов в определении класса. do
Хотя ключевое слово является необязательным для привязок на уровне модуля, он не является необязательным для do
do
привязок в определении класса.
Для построения каждого объекта любого типа нестатические привязки и нестатические do
let
привязки выполняются в том порядке, в котором они отображаются в определении класса. Несколько do
привязок могут выполняться в одном типе. Нестатические привязки и нестатические let
do
привязки становятся телом основного конструктора. Код в разделе нестатических do
привязок может ссылаться на основные параметры конструктора и любые значения или функции, определенные в let
разделе привязок.
Нестатические do
привязки могут получить доступ к членам класса, если класс имеет идентификатор, определенный as
ключевое слово в заголовке класса, и до тех пор, пока все использование этих элементов квалифицированы с помощью самоиндендного идентификатора класса.
Так как let
привязки инициализируют частные поля класса, которые часто необходимы для обеспечения правильного поведения элементов, привязки обычно помещаются после let
привязок, do
чтобы код в do
привязке может выполняться с полностью инициализированным объектом. Если код пытается использовать элемент до завершения инициализации, вызывается исключение InvalidOperationException.
Статические do
привязки могут ссылаться на статические члены или поля включающего класса, но не элементы экземпляра или поля. Статические do
привязки становятся частью статического инициализатора для класса, который гарантированно выполняется до первого использования класса.
Атрибуты игнорируются для do
привязок в типах. Если атрибут требуется для кода, выполняемого do
в привязке, он должен применяться к основному конструктору.
В следующем коде класс имеет статическую привязку и нестатическую do
do
привязку. Объект имеет конструктор с двумя параметрами, 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