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();;
この例では一つだけですが
通常のクラスと同様に
インタフェースは複数実装することができます。