Udostępnij za pośrednictwem


Wyrażenia obiektów

Wyrażenie obiektu to wyrażenie , które tworzy nowe wystąpienie kompilatora wygenerowanego, anonimowego typu obiektu opartego na istniejącym typie podstawowym, interfejsie lub zestawie interfejsów.

Składnia

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

Uwagi

W poprzedniej składni nazwa_typu reprezentuje istniejący typ klasy lub typ interfejsu. Type-params opisuje opcjonalne parametry typu ogólnego. Argumenty są używane tylko dla typów klas, które wymagają parametrów konstruktora. Definicje składowe są zastępowane metodami klasy bazowej lub implementacjami metod abstrakcyjnych z klasy bazowej lub interfejsu.

Poniższy przykład ilustruje kilka różnych typów wyrażeń obiektów.

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

Używanie wyrażeń obiektów

Wyrażenia obiektów są używane, gdy chcesz uniknąć dodatkowego kodu i nakładu pracy wymaganego do utworzenia nowego, nazwanego typu. Jeśli używasz wyrażeń obiektów, aby zminimalizować liczbę typów utworzonych w programie, możesz zmniejszyć liczbę wierszy kodu i zapobiec niepotrzebnemu rozprzestrzenianiu się typów. Zamiast tworzyć wiele typów tylko do obsługi określonych sytuacji, można użyć wyrażenia obiektu, które dostosowuje istniejący typ lub zapewnia odpowiednią implementację interfejsu dla konkretnego przypadku.

Zobacz też