Inheritance 我应该使用继承还是接口?

Inheritance 我应该使用继承还是接口?,inheritance,f#,interface,Inheritance,F#,Interface,以下两者之间的区别是什么: type IFooable = interface IDisposable abstract Foo : (unit -> unit) 及 ? 如果等效,在哪些情况下我应该使用一个而不是另一个? 谢谢 如果你只打算使用抽象方法,你应该使用接口。因为您只能继承一个类,但可以实现许多接口。(我最初认为)必须将“继承”与基类(最多一个)一起使用。您可以对要实现的任何接口使用“接口” 因此,在IDisposable的情况下,它必须是“接口” 编辑,好

以下两者之间的区别是什么:

type IFooable =
    interface IDisposable

    abstract Foo : (unit -> unit)

?

如果等效,在哪些情况下我应该使用一个而不是另一个?
谢谢

如果你只打算使用抽象方法,你应该使用接口。因为您只能继承一个类,但可以实现许多接口。

(我最初认为)必须将“继承”与基类(最多一个)一起使用。您可以对要实现的任何接口使用“接口”

因此,在IDisposable的情况下,它必须是“接口”

编辑,好的,编译器允许,但这可能是一个错误,我会看看


编辑:从另一个角度看,这可能是一个bug,并且可能的接口会迫使您使用“继承”来继承其他接口,因为“继承”的成员在“隐式接口”意义上总是直接可见的,而类上的“接口”声明是一个“显式”接口,需要对该接口类型进行转换才能使用这些成员。不管怎样,我们可能会消除语言语法中的这种灵活性,因此只有一种方法来编写,而不是两种等效的方法。

我倾向于将继承用于真正的oop(即X isa Y)和接口,作为一种装饰器实现

也许这不是一种“正确”的方式,但我们非常喜欢它

我的意思是X将继承Y,但是我们想从V、W和Z中给它一些额外的功能

捷达是一辆汽车,但也是伊迪塞尔、伊格曼、伊布罗肯


这正是我当前项目的工作方式,我可能会因为“滥用oop”或其他原因而被否决:)

听起来很疯狂。如果你的车同时执行IBroken和IWorkingOrder怎么办?IToyota和IFord?好吧,这是个可怕的例子!:)实际上,一个更好的例子是一个TabControl,它有一堆专门的TabPages。有些是ITxRx,因为它们有特定类型的行为。其他的是另一种。疯狂的设计,当然,但奇怪的是,它工作得非常好。有道理。我现在对此有了更好的理解。谢谢!
type IFooable =
    inherit IDisposable

    abstract Foo : (unit -> unit)