Object Expression

Object Expressionとは、 既存のクラスを継承したオブジェクトを記述するための文法です。 雰囲気としては、無名関数に似ていて 直接、子クラスのオブジェクトを生成出来ます。 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 ] }
withの後にendの入った以前紹介していた冗語構文の文法もまだ有効なようです
オブジェクト式
object expression := { new コンストラクタ呼び出し with メンバの定義 end インタフェースの実装 }
具体的には次のようになります
オブジェクト式の例
let helloobj =
    { new System.Object() with
        member x.ToString() = "Hello";
      end};;
printfn "%s" (helloobj.ToString())
オブジェクト式の例(軽量構文)
let helloobj =
    { new System.Object() with
        member x.ToString() = "Hello";
    }
printfn "%s" (helloobj.ToString())
obj型(System.Objct)のオブジェクトは ToString()というメソッドを持っています。 この例では、ToString()を置き換えたオブジェクトを生成し ToString()を呼び出しています。 また、次の例のように、 元のクラスにはないインタフェースを実装することもできます。
インタフェースの実装
let disposable_obj =
   { new System.Object() with
         member x.ToString() = "disposable obj"
     interface System.IDisposable with
         member x.Dispose() = printfn "Dispose";
        end
     end};;
disposable_obj.Dispose();;
インタフェースの実装(軽量構文)
let disposable_obj =
   { new System.Object() with
         member x.ToString() = "disposable obj"
     interface System.IDisposable with
         member x.Dispose() = printfn "Dispose";
    }
disposable_obj.Dispose();;
この例では一つだけですが 通常のクラスと同様に インタフェースは複数実装することができます。