2009-07-21 32 views
1

我試圖創建需要對IEvent之上附加的方法,這樣的接口的接口:如何創建與F#的其他方法

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:處理器<‘T> - >單元’

但這種類型的一點是該成員是抽象的。我究竟做錯了什麼?

回答

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