C# 接口成员是抽象的吗?

C# 接口成员是抽象的吗?,c#,interface,abstract,C#,Interface,Abstract,我知道界面中的成员表现得像是抽象的,但实际上他们是抽象的吗?我的意思是,我不需要使用那个关键字,所以我不确定它是隐式的还是从技术上来说不是抽象的……希望它有意义它们是隐式抽象的,因为它们没有定义行为,只描述了成员的签名 我不知道它在IL上是什么样子(实际上可能永远也不需要知道)。它们不是抽象的-它们是由接口定义的契约。“抽象”具有特定含义,仅适用于类 也就是说,它们的行为非常类似于类中的抽象成员——实现接口的任何类型都必须实现该成员或抽象本身。它们在概念上是抽象的,因为实现接口的类必须实现每个成

我知道界面中的成员表现得像是抽象的,但实际上他们是抽象的吗?我的意思是,我不需要使用那个关键字,所以我不确定它是隐式的还是从技术上来说不是抽象的……希望它有意义

它们是隐式抽象的,因为它们没有定义行为,只描述了成员的签名


我不知道它在IL上是什么样子(实际上可能永远也不需要知道)。

它们不是抽象的-它们是由接口定义的契约。“抽象”具有特定含义,仅适用于类


也就是说,它们的行为非常类似于类中的抽象成员——实现接口的任何类型都必须实现该成员或抽象本身。

它们在概念上是抽象的,因为实现接口的类必须实现每个成员或声明自己是
抽象的


它们不是技术意义上的抽象类,因为只有类是抽象类。抽象方法隐式地是虚拟的

接口实现不需要是虚拟的。(事实上,可以明确地实现“冲突”接口(即声明相同成员签名的接口)。这在
vtable单次分派
[1]中是不可能的,因为单个vtable插槽不能填充两次)


[1] 虚拟继承的经典实现方法

+1。打得好,这是一个显著的区别。实际上,您还可以实现冲突的实现,其中一个更派生的类重新实现一个在父类中实现的接口。欢闹接踵而至,太真实了。然而,对于显式接口实现,客户机通常不知道,因为他得到的只是他期望的IInterestingInterface。IMHO显式接口已经有点过时了:我觉得在我的类中使用它们只是为了弥补闭包(在3.5中修复)或Java风格的非静态内部(嵌套)类的不足。。。。哦,我们错过的欢笑将被可数、可查询、可观察之间的混淆大大补偿,这些都会微妙地不同,并会创造新的欢笑语义惊喜。未来的证明!