Sdílet prostřednictvím


Objektové výrazy

Výraz objektu je výraz, který vytvoří novou instanci vygenerovaného kompilátoru, anonymní typ objektu založený na existujícím základním typu, rozhraní nebo sadě rozhraní.

Syntaxe

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

Poznámky

V předchozí syntaxi představuje název typu existující třídy nebo typ rozhraní. Parametry type-params popisují volitelné parametry obecného typu. Argumenty se používají pouze pro typy tříd, které vyžadují parametry konstruktoru. Definice členů jsou přepsání metod základní třídy nebo implementace abstraktních metod ze základní třídy nebo rozhraní.

Následující příklad ukazuje několik různých typů výrazů objektu.

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

Použití výrazů objektů

Výrazy objektů se používají, pokud se chcete vyhnout nadbytečnému kódu a režijním nákladům potřebným k vytvoření nového pojmenovaného typu. Pokud pomocí výrazů objektů minimalizujete počet typů vytvořených v programu, můžete snížit počet řádků kódu a zabránit zbytečnému šíření typů. Místo vytváření mnoha typů jen pro zpracování konkrétních situací můžete použít objektový výraz, který přizpůsobí existující typ nebo poskytne odpovídající implementaci rozhraní pro konkrétní případ.

Viz také