我知道界面中的成员表现得像抽象,但实际上它们是抽象的吗?我的意思是我不需要使用该关键字,所以我不确定它是隐含的还是它们在技术上不是抽象的...希望它有意义
答案 0 :(得分:5)
它们不是抽象的 - 它们是由界面定义的契约。 “abstract”具有特定含义,仅适用于类。
话虽如此,它们的行为与类中的抽象成员非常相似 - 实现接口的任何类型都必须实现成员或者本身是抽象的。
答案 1 :(得分:2)
它们在概念上是抽象的,因为实现接口的类必须实现每个成员或将自己声明为abstract
。
从技术意义上讲,它们不是abstract
,因为只有类abstract
。
答案 2 :(得分:2)
不。隐式抽象方法是虚拟的。
接口实现不需要是虚拟的。 (实际上,有可能明确地实现'冲突'接口(即声明相同成员签名的接口)。vtable single dispatch
[1]无法实现这一点,因为单个vtable槽无法填充两次)
[1]虚拟继承的经典实现方法
答案 3 :(得分:0)
它们是隐式抽象的,因为它们没有定义行为,只描述了成员的签名。
我不知道它在IL上的样子(实际上可能永远不需要知道)。