有什么区别:
type IFooable =
interface IDisposable
abstract Foo : (unit -> unit)
和
type IFooable =
inherit IDisposable
abstract Foo : (unit -> unit)
如果相同,在哪种情况下我应该使用一个而不是另一个? 谢谢!
答案 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)