継承やインタフェースはほんとうにいらないかもしれない
http://blog.livedoor.jp/gab_km/archives/1425937.html
だって、F#にはレコードがありますから。(いまさらのリアクションでごめんなさい)
type Animal = { name: string; bark: unit->string } let makeDog name = { name = name ; bark = fun () -> "Bow wow!"} let makeCat name = { name = name ; bark = fun () -> "meow"} (* 継承っぽいこと *) let makeTiger name = let cat = makeCat name { cat with bark = fun () -> cat.bark() + "!!!" } let animals = [ makeDog "Pochi"; makeCat "Tama"; makeTiger "Tora" ] animals |> Seq.map (fun a -> a.bark()) |> Seq.iter (printf "%A ") // "Bow wow!" "meow" "meow!!!"
F#に閉じて書くんなら継承やインタフェースはほんとうに使わなくて済むと思います。C#のコードから呼び出す、とかC#向けに拡張ポイント作るとなると大体のケースで避けられないですけど。