다음을 통해 공유


개체 식

개체 식은 기존 기본 형식, 인터페이스 또는 인터페이스 집합을 기반으로 하는 컴파일러 생성, 익명 개체 형식의 새 인스턴스를 만드는 식입니다.

구문

// When typename is a class:
{ new typename [type-params]arguments with
    member-definitions
    [ additional-interface-definitions ]
}
// When typename is not a class:
{ new typename [generic-type-args] with
    member-definitions
    [ additional-interface-definitions ]
}

설명

이전 구문에서 typename기존 클래스 형식 또는 인터페이스 형식을 나타냅니다. type-params는 선택적 제네릭 형식 매개 변수를 설명합니다. 인수생성자 매개 변수가 필요한 클래스 형식에만 사용됩니다. 멤버 정의기본 클래스 메서드의 재정의 또는 기본 클래스 또는 인터페이스에서 추상 메서드의 구현입니다.

다음 예제에서는 여러 가지 유형의 개체 식을 보여 줍니다.

// This object expression specifies a System.Object but overrides the
// ToString method.
let obj1 = { new System.Object() with member x.ToString() = "F#" }
printfn $"{obj1}"

// This object expression implements the IFormattable interface.
let delimiter(delim1: string, delim2: string, value: string) =
    { new System.IFormattable with
        member x.ToString(format: string, provider: System.IFormatProvider) =
            if format = "D" then
                delim1 + value + delim2
            else
                value }

let obj2 = delimiter("{","}", "Bananas!");

printfn "%A" (System.String.Format("{0:D}", obj2))

// Define two interfaces
type IFirst =
  abstract F : unit -> unit
  abstract G : unit -> unit

type ISecond =
  inherit IFirst
  abstract H : unit -> unit
  abstract J : unit -> unit

// This object expression implements both interfaces.
let implementer() =
    { new ISecond with
        member this.H() = ()
        member this.J() = ()
      interface IFirst with
        member this.F() = ()
        member this.G() = () }

개체 식 사용

명명된 새 형식을 만드는 데 필요한 추가 코드 및 오버헤드를 방지하려면 개체 식을 사용합니다. 개체 식을 사용하여 프로그램에서 만든 형식 수를 최소화하는 경우 코드 줄 수를 줄이고 불필요한 형식 확산을 방지할 수 있습니다. 특정 상황을 처리하기 위해 많은 형식을 만드는 대신 기존 형식을 사용자 지정하거나 현재 특정 사례에 대한 인터페이스의 적절한 구현을 제공하는 개체 식을 사용할 수 있습니다.

참고 항목