Поделиться через


Выражения объекта (F#)

Выражение объекта — это выражение, которое создает новый экземпляр динамически создаваемого типа анонимного объекта на основе существующего базового типа, интерфейса или набора интерфейсов.

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

Заметки

В приведенной выше синтаксической конструкции typename представляет собой существующий тип класса или тип интерфейса. type-params описывает необязательные параметры универсального типа. Элементы arguments используются только для типов класса, которые требуют параметры конструктора. Элементы member-definitions являются переопределением методов базового класса или реализаций абстрактных методов базового класса или интерфейса.

Следующий пример иллюстрирует несколько разных типов выражений объекта.

// This object expression specifies a System.Object but overrides the
// ToString method.
let obj1 = { new System.Object() with member x.ToString() = "F#" }
printfn "%A" obj1 

// This object expression implements the IFormattable interface.
let Delimiter(delim1 : string, delim2 : string ) = { new System.IFormattable with
                member x.ToString(format : string, provider : System.IFormatProvider) =
                  if format = "D" then delim1 + x.ToString() + delim2
                  else x.ToString()
           }

let obj2 = Delimiter("{","}");

printfn "%A" (System.String.Format("{0:D}", obj2))

// This object expression implements multiple 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 an interface chain.
let Implementer() = { new ISecond with
                         member this.H() = ()
                         member this.J() = ()
                       interface IFirst with
                         member this.F() = ()
                         member this.G() = ()
                    }

Использование выражений объекта

Выражения объекта используются, когда требуется избегать дополнительного кода и служебных данных, что требуется для создания нового именованного типа. Если использовать выражения объекта для минимизации числа типов, созданных в программе, можно сократить число строк кода и предотвратить ненужное увеличение числа типов. Вместо создания множества типов для различных ситуаций можно использовать выражение объекта, которое настроит существующий тип или предоставит соответствующую реализацию интерфейса для конкретного случая.

См. также

Другие ресурсы

Справочник по языку F#