클래스의 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#)를 참조하십시오.