Выражения объекта
Выражение объекта — это выражение , которое создает новый экземпляр созданного компилятора, анонимного типа объекта, основанного на существующем базовом типе, интерфейсе или наборе интерфейсов.
Синтаксис
// 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 ]
}
Замечания
В предыдущем синтаксисе имя типа представляет существующий тип класса или тип интерфейса. Type-params описывает необязательные параметры универсального типа. Аргументы используются только для типов классов, для которых требуются параметры конструктора. Определения-члены переопределяют методы базового класса или реализации абстрактных методов из базового класса или интерфейса.
В следующем примере показано несколько различных типов выражений объектов.
// 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() = () }
Использование выражений объектов
Выражения объектов используются, если требуется избежать дополнительных кодов и накладных расходов, необходимых для создания нового именованного типа. При использовании выражений объектов для минимизации числа типов, созданных в программе, можно уменьшить количество строк кода и предотвратить ненужное распространение типов. Вместо создания множества типов только для обработки конкретных ситуаций можно использовать выражение объекта, которое настраивает существующий тип или предоставляет соответствующую реализацию интерфейса для конкретного случая.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по