次の方法で共有


let Bindings in Classes

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 を定義に追加することで、クラス内のプライベート フィールドを定義することもできます。 これは、コードを書き直さずにメンバーのアクセシビリティを変更することが予想される場合に役立ちます。 詳細については、「 アクセス制御」を参照してください。

こちらも参照ください