다음을 통해 공유


개체 식(F#)

개체 식은 기존의 기본 형식, 인터페이스 또는 인터페이스 집합을 기반으로 하여 동적으로 작성되는 익명 개체 형식의 새 인스턴스를 만드는 식입니다.

// 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는 선택적 제네릭 형식 매개 변수를 설명합니다. arguments는 생성자 매개 변수를 필요로 하는 클래스 형식에만 사용됩니다. member-definitions는 기본 클래스 메서드의 재정의이거나 기본 클래스 또는 인터페이스를 통한 추상 메서드의 구현입니다.

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

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

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

let obj2 = Delimiter("{","}");

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

// This object expression implements multiple 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 an interface chain.
let Implementer() = { new ISecond with
                         member this.H() = ()
                         member this.J() = ()
                       interface IFirst with
                         member this.F() = ()
                         member this.G() = ()
                    }

개체 식 사용

명명된 형식을 새로 만드는 데 필요한 추가 코드와 오버헤드를 원하지 않는 경우 개체 식을 사용할 수 있습니다. 개체 식을 사용하여 프로그램에서 작성되는 형식의 수를 최소화하면 코드 줄 수를 줄이고 형식이 불필요하게 늘어나는 것을 방지할 수 있습니다. 단지 특정 상황을 처리하기 위해 여러 개의 형식을 만드는 대신 개체 식을 사용하여 기존 형식을 사용자 지정하거나 당면한 특정 사례에 대한 인터페이스를 적절하게 구현할 수 있습니다.

참고 항목

기타 리소스

F# 언어 참조