개체 식
개체 식은 기존 기본 형식, 인터페이스 또는 인터페이스 집합을 기반으로 하는 컴파일러 생성, 익명 개체 형식의 새 인스턴스를 만드는 식입니다.
구문
// 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() = () }
개체 식 사용
명명된 새 형식을 만드는 데 필요한 추가 코드 및 오버헤드를 방지하려면 개체 식을 사용합니다. 개체 식을 사용하여 프로그램에서 만든 형식 수를 최소화하는 경우 코드 줄 수를 줄이고 불필요한 형식 확산을 방지할 수 있습니다. 특정 상황을 처리하기 위해 많은 형식을 만드는 대신 기존 형식을 사용자 지정하거나 현재 특정 사례에 대한 인터페이스의 적절한 구현을 제공하는 개체 식을 사용할 수 있습니다.
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET