Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Objektausdruck ist ein Ausdruck, der eine neue Instanz eines generierten, anonymen Objekttyps erstellt, der auf einem vorhandenen Basistyp, einer Schnittstelle oder einem Satz von 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 der Typname einen vorhandenen Klassentyp oder Schnittstellentyp dar. type-params beschreibt die optionalen generischen Typparameter. Die Argumente werden nur für Klassentypen verwendet, für die Konstruktorparameter erforderlich sind. Die Memberdefinitionen sind Außerkraftsetzungen von Basisklassenmethoden oder Implementierungen abstrakter Methoden aus einer Basisklasse oder einer Schnittstelle.
Im folgenden Beispiel werden verschiedene Objektausdrücke veranschaulicht.
// 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 zusätzlichen Code und Zusätzlichen Aufwand vermeiden möchten, der zum Erstellen eines neuen benannten Typs erforderlich ist. Wenn Sie Objektausdrücke verwenden, um die Anzahl der in einem Programm erstellten Typen zu minimieren, können Sie die Anzahl der Codezeilen verringern und die unnötige Verbreitung von Typen verhindern. Anstatt viele Typen nur für bestimmte Situationen zu erstellen, können Sie einen Objektausdruck verwenden, der einen vorhandenen Typ anpasst oder eine geeignete Implementierung einer Schnittstelle für den jeweiligen Fall bereitstellt.