クラス内の let 束縛
クラス定義で 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 キーワード」を参照してください。
メンバー定義を使用し、キーワード private
を定義に追加することで、クラスのプライベート フィールドを定義することもできます。 これは、コードを書き直さずにメンバーのアクセシビリティを変更する必要がある場合に便利です。 詳しくは、「アクセス制御」をご覧ください。
関連項目
.NET