簡體   English   中英

如何在F#中使用其他方法創建接口

[英]How to create an interface with additional methods in 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)

我添加了GetSet方法。 問題是F#編譯器要我實現抽象成員:

沒有為“抽象成員Varying.AddHandler:Handler <'t>-> unit'給出任何實現

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

您可以在定義中添加[<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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM