[英]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)
我添加了Get
& Set
方法。 問題是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.