다음을 통해 공유


클래스의 do 바인딩

클래스 정의의 바인딩은 do 개체가 생성될 때 또는 정적 do 바인딩에 대해 형식이 처음 사용될 때 작업을 수행합니다.

구문

[static] do expression

설명

바인딩은 do 바인딩과 함께 또는 이후에 let 클래스 정의의 멤버 정의 앞에 나타납니다. do 키워드(keyword) 모듈 수준의 바인딩에 대해 do 선택 사항이지만 클래스 정의의 바인딩에는 do 선택 사항이 아닙니다.

지정된 형식의 모든 개체를 생성하는 경우 비정적 do 바인딩 및 비정적 let 바인딩은 클래스 정의에 나타나는 순서대로 실행됩니다. 한 형식에서 여러 do 바인딩이 발생할 수 있습니다. 비정적 let 바인딩 및 비정적 do 바인딩은 기본 생성자의 본문이 됩니다. 비정적 do 바인딩 섹션의 코드는 기본 생성자 매개 변수 및 바인딩 섹션에 정의된 값 또는 함수를 let 참조할 수 있습니다.

비정적 do 바인딩은 클래스 제목에 키워드(keyword) 의해 as 정의된 자체 식별자가 클래스에 있는 한 클래스의 멤버에 액세스할 수 있으며, 해당 멤버의 모든 사용이 클래스에 대한 자체 식별자로 한정되는 한 클래스의 멤버에 액세스할 수 있습니다.

let 바인딩은 멤버가 예상대로 do 동작하도록 보장하는 데 필요한 클래스의 프라이빗 필드를 초기화하므로 바인딩은 일반적으로 바인딩 후에 let 배치되므로 바인딩의 do 코드가 완전히 초기화된 개체로 실행될 수 있습니다. 코드가 초기화가 완료되기 전에 멤버를 사용하려고 하면 InvalidOperationException이 발생합니다.

정적 do 바인딩은 인스턴스 멤버 또는 필드가 아닌 바깥쪽 클래스의 정적 멤버 또는 필드를 참조할 수 있습니다. 정적 do 바인딩은 클래스가 처음 사용되기 전에 실행되도록 보장되는 클래스에 대한 정적 이니셜라이저의 일부가 됩니다.

형식의 바인딩에 대해서는 do 특성이 무시됩니다. 바인딩에서 do 실행되는 코드에 특성이 필요한 경우 기본 생성자에 적용해야 합니다.

다음 코드에서 클래스에는 정적 바인딩과 비정 dodo 바인딩이 있습니다. 개체에는 두 개의 매개 변수가 있는 생성자가 있으며 ba 개의 프라이빗 필드가 클래스의 let 바인딩에 정의됩니다. 두 개의 속성도 정의됩니다. 이러한 모든 값은 모든 값을 인쇄하는 줄에 설명된 것처럼 비정적 do 바인딩 섹션의 범위에 있습니다.

open System

type MyType(a: int, b: int) as this =
    inherit Object()
    let x = 2 * a
    let y = 2 * b
    do printfn "Initializing object %d %d %d %d %d %d" a b x y (this.Prop1) (this.Prop2)
    static do printfn "Initializing MyType."
    member this.Prop1 = 4 * x
    member this.Prop2 = 4 * y

    override this.ToString() =
        System.String.Format("{0} {1}", this.Prop1, this.Prop2)

let obj1 = new MyType(1, 2)

출력은 다음과 같습니다.

Initializing MyType.
Initializing object 1 2 2 4 8 16

참고 항목