如何在F#中声明循环相关的抽象类

时间:2012-05-06 04:48:43

标签: .net f# abstract-class circular-dependency circular-reference

考虑两个抽象类alpha和beta:

[<AbstractClass>]  
type alpha () =
    abstract member foo: beta->beta

[<AbstractClass>] 
and beta () = //***
    abstract member bar: alpha

如果我尝试编译,我收到错误, 在用* * *表示的行上:

error FS0010: Unexpected keyword 'and' in interaction

如果我写:

[<AbstractClass>]  
type alpha () =
    abstract member foo: beta->beta

and beta () =
    abstract member bar: alpha

然后我得到:

error FS0365: No implementation was given for 'abstract member beta.bar : alpha'

并提示我应该添加AbstractClass属性

那么我如何声明循环定义的抽象类?

1 个答案:

答案 0 :(得分:7)

将属性放在'and'关键字后面:

[<AbstractClass>]
type alpha () =
    abstract member foo : beta -> beta

and [<AbstractClass>]  beta () =
    abstract member bar : alpha