Freigeben über


Objektausdrücke

Ein Objektausdruck ist ein Ausdruck, der neue Instanzen eines vom Compiler generierten anonymen Objekttyps erstellt, der auf einem vorhandenen Basistyp oder einer oder mehrerer Schnittstellen basiert.

Syntax

// 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 ]
}

Bemerkungen

In der vorherigen Syntax stellt typename einen vorhandenen Klassen- oder Schnittstellentyp dar. type-params beschreibt die optionalen generischen Typparameter. arguments werden nur für Klassentypen verwendet, die Konstruktorparameter erfordern. member-definitions sind Überschreibungen von Basisklassenmethoden oder Implementierungen abstrakter Methoden aus einer Basisklasse oder einer Schnittstelle.

Das folgende Beispiel veranschaulicht verschiedene Arten von Objektausdrücken.

// 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() = () }

Verwenden von Objektausdrücken

Sie verwenden Objektausdrücke, wenn Sie den zusätzlichen Code und Aufwand vermeiden möchten, der zum Erstellen eines neuen, benannten Typs erforderlich ist. Wenn Sie mithilfe von Objektausdrücken die Anzahl der in einem Programm erstellten Typen minimieren, können Sie die Anzahl der Codezeilen reduzieren und die unnötige Zunahme von Typen verhindern. Anstatt viele Typen zu erstellen, nur um bestimmte Situationen zu behandeln, können Sie einen Objektausdruck verwenden, der einen vorhandenen Typ anpasst oder eine geeignete Implementierung einer Schnittstelle für den jeweiligen Fall bereitstellt.

Weitere Informationen