Megosztás a következőn keresztül:


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.

Lásd még