我有以下带有接口和抽象类的代码。
type INode<'a> =
abstract member Parent:INode<'a>
abstract member Evaluate:unit->'a
abstract member Clone:INode<'a> -> INode<'a>
abstract member SelectRandom:int->INode<'a> option
[<AbstractClass>]
type TerminalNode<'a>() =
interface INode<'a> with
member this.SelectRandom indexOfCurrentNode =
let p = 1.0 / float indexOfCurrentNode
if Random().NextDouble() < p then Some (this:>INode<'a>) else None
我想在此实现层次结构 ,但编译器抱怨接口的所有方法都应实现。
创建一个抽象类的正确方法是什么,该抽象类实现一个接口并实现该接口的一个方法而使其他方法抽象化?
注意:如果看不到图像,则说明您的网络阻止了imgur.com。
答案 0 :(得分:5)
您可以在类型上定义抽象成员,然后提供指向这些抽象成员的实现。例如:
[<AbstractClass>]
type TerminalNode<'a>() as self =
abstract member Parent : INode<'a>
abstract member Evaluate : unit->'a
abstract member Clone:INode<'a> -> INode<'a>
interface INode<'a> with
member this.Parent = self.Parent
member this.Evaluate () = self.Evaluate ()
member this.Clone a = self.Clone a
member this.SelectRandom indexOfCurrentNode =
...
(请注意as self
行中的type
,可让您通过变量名self
来引用抽象类型)