共用方式為


物件運算式 (F#)

「物件運算式」(Object Expression) 會根據現有的基底型別、一個介面或一組介面來建立動態建立、匿名物件型別的新執行個體。

// 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# 語言參考