Objektumkifejezések
Az objektumkifejezés egy olyan kifejezés, amely létrehoz egy olyan fordító új példányát, amely névtelen objektumtípust hoz létre, amely egy meglévő alaptípuson, interfészen vagy illesztőkészleten alapul.
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 ]
}
Megjegyzések
Az előző szintaxisban a típusnév egy meglévő osztálytípust vagy illesztőtípust jelöl. A type-params az opcionális általános típusparamétereket írja le. Az argumentumok csak osztálytípusokhoz használhatók, amelyek konstruktorparamétereket igényelnek. A tagdefiníciók az alaposztály metódusainak felülbírálásai, vagy egy alaposztályból vagy interfészből származó absztrakt metódusok implementációi.
Az alábbi példa számos különböző típusú objektumkifejezést szemléltet.
// 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() = () }
Objektumkifejezések használata
Objektumkifejezéseket akkor használ, ha el szeretné kerülni az új, elnevezett típus létrehozásához szükséges többletkódot és többletterhelést. Ha objektumkifejezésekkel minimalizálja a programban létrehozott típusok számát, csökkentheti a kódsorok számát, és megakadályozhatja a típusok szükségtelen elterjedését. Ahelyett, hogy több típust hoz létre csak meghatározott helyzetek kezelésére, használhat egy objektumkifejezést, amely testre szab egy meglévő típust, vagy megfelelő felületet biztosít az adott esethez.