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


Привязки let в классах (F#)

Можно определять закрытые поля и закрытые функции для классов языка 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 (F#).

Закрытые поля можно также определять в классе с помощью определения члена с добавлением ключевого слова private в определение. Это может быть полезным, если вы собираетесь изменить доступность члена, не переписывая код. Дополнительные сведения см. в разделе Управление доступом (F#).

См. также

Ссылки

Привязки do в классах (F#)

Привязки let (F#)

Основные понятия

Члены (F#)