クラス内の let 束縛 (F#)

クラス定義で let 束縛を使用することで、F# クラスのプライベート フィールドおよびプライベート関数を定義できます。

// 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#)