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

Вы можете определить частные поля и частные функции для классов F# с помощью let привязок в определении класса.

Синтаксис

// Field.
[static] let [ mutable ] binding1 [ and ... binding-n ]

// Function.
[static] let [ rec ] binding1 [ and ... binding-n ]

Замечания

Предыдущий синтаксис отображается после объявлений заголовка класса и наследования, но перед любыми определениями элементов. Синтаксис похож на let привязки за пределами классов, но имена, определенные в классе, имеют область, ограниченное классом. Привязка let создает частное поле или функцию, чтобы предоставлять данные или функции публично, объявлять свойство или метод-член.

Привязка let , которая не является статической, называется привязкой экземпляра let . Привязки экземпляров let выполняются при создании объектов. Статические let привязки являются частью статического инициализатора для класса, который гарантированно выполняется до первого использования типа.

Код в привязках экземпляра let может использовать параметры первичного конструктора.

Атрибуты и модификаторы специальных возможностей не допускаются для let привязок в классах.

В следующих примерах кода показано несколько типов let привязок в классах.

type PointWithCounter(a: int, b: int) =
    // A variable i.
    let mutable i = 0

    // A let binding that uses a pattern.
    let (x, y) = (a, b)

    // A private function binding.
    let privateFunction x y = x * x + 2 * y

    // A static let binding.
    static let mutable count = 0

    // A do binding.
    do count <- count + 1

    member this.Prop1 = x
    member this.Prop2 = y
    member this.CreatedCount = count
    member this.FunctionValue = privateFunction x y

let point1 = PointWithCounter(10, 52)

printfn "%d %d %d %d" (point1.Prop1) (point1.Prop2) (point1.CreatedCount) (point1.FunctionValue)

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

10 52 1 204

Альтернативные способы создания полей

Вы также можете использовать val ключевое слово для создания частного поля. При использовании val ключевое слово поле не получает значение при создании объекта, а инициализируется значением по умолчанию. Дополнительные сведения см. в разделе "Явные поля: ключевое слово val".

Вы также можете определить частные поля в классе с помощью определения члена и добавления ключевое слово private в определение. Это может быть полезно, если вы ожидаете изменить специальные возможности члена без перезаписи кода. Дополнительные сведения см. в разделе Access Control.

См. также