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

时间:2009-10-27 00:47:17

标签: inheritance f# interface

有什么区别:

type IFooable =
    interface IDisposable

    abstract Foo : (unit -> unit)

type IFooable =
    inherit IDisposable

    abstract Foo : (unit -> unit)

如果相同,在哪种情况下我应该使用一个而不是另一个? 谢谢!

3 个答案:

答案 0 :(得分:6)

(我原本以为)你必须使用'inherit'和(最多一个)base class 。您可以对要实现的任何接口使用“interface”。

因此,在IDisposable的情况下,它必须是'interface'。

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

编辑:事实证明它可能是另一种可能的错误,可能的界面会强制你使用'继承'来继承其他界面,这个想法是'继承'成员总是在'隐含接口'意义上直接可见,而类上的“接口”声明是一个“显式”接口,需要强制转换为该接口类型才能使用这些成员。无论如何,我们可能会删除语言语法中的这种灵活性,因此只有一种方法可以创建它,而不是两种等效方式。

答案 1 :(得分:0)

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

可能不是事实上的“正确”方式,但我们非常喜欢它。

我的意思是X将继承Y,但接下来我们要为它提供V,W和Z的额外功能。

“捷达是汽车,但也是IDiesel,IGerman,IBroken”

这就是我当前项目的方式,我可能会因为“滥用oop”或某事而被投票:)

答案 2 :(得分:-1)

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