2009-07-21 7 views
1

Ich versuche, eine Schnittstelle zu schaffen, die auf der IEvent zusätzliche Methoden erfordert, wie folgt aus:Wie eine Schnittstelle mit zusätzlichen Methoden in F # erstellen

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) 

ich hinzugefügt, um die Get & Set Methoden. Das Problem ist, dass die F # -Compiler will, dass ich die abstrakten Elemente implementieren:

Keine Umsetzung wurde für ‚abstrakt Mitglied Varying.AddHandler: Handler < 'gegeben t> -> unit'

Aber die Punkt dieses Typs ist, dass das Mitglied abstrakt ist. Was mache ich falsch?

Antwort

6

Sie können [<AbstractClass>] Label Ihrer Definition hinzu:

> [<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 
Verwandte Themen