2009-07-21 16 views
1

F#での追加メソッドとのインタフェースを作成するために:どのように私はこのようなIEventの上に追加的な方法を、必要とするインタフェースを作成しようとしている

type Varying<'t> = 
    abstract member Get : unit -> 't 
    abstract member Set : 't -> unit 
    abstract member AddHandler : Handler<'t> -> unit 
    abstract member RemoveHandler : Handler<'t> -> unit 
    member v.Add(f) = v.AddHandler(new Handler<_>(fun _ x -> f x)) 
    interface IEvent<'t> with 
     member c.AddHandler(h) = c.AddHandler(h) 
     member c.RemoveHandler(h) = c.RemoveHandler(h) 
     member c.Add(f) = c.Add(f) 

を私はGet & Setメソッドを追加しました。問題は、F#コンパイラは、抽象メンバーを実装するために私を望んでいることである:

ませ実装は「抽象メンバーVarying.AddHandler:ハンドラ< 『の与えられなかった

トン> - >ユニット』

しかし、このタイプのポイントは、メンバーが抽象であることです。私は間違って何をしていますか?

答えて

6

あなたの定義に[<AbstractClass>]ラベルを追加することができます。

> [<AbstractClass>] 
- type Varying<'t> = 
-  abstract member Get : unit -> 't 
-  abstract member Set : 't -> unit 
-  abstract member AddHandler : Handler<'t> -> unit 
-  abstract member RemoveHandler : Handler<'t> -> unit 
-  member v.Add(f) = v.AddHandler(new Handler<_>(fun _ x -> f x)) 
-  interface IEvent<'t> with 
-   member c.AddHandler(h) = c.AddHandler(h) 
-   member c.RemoveHandler(h) = c.RemoveHandler(h) 
-   member c.Add(f) = c.Add(f) 
- ;; 

type Varying<'t> = 
    class 
    abstract member AddHandler : Handler<'t> -> unit 
    abstract member Get : unit -> 't 
    abstract member RemoveHandler : Handler<'t> -> unit 
    abstract member Set : 't -> unit 
    interface IEvent<'t> 
    member Add : f:('t -> unit) -> unit 
    end 
関連する問題