接口成员是抽象的吗?

时间:2011-04-13 18:05:04

标签: c# interface abstract

我知道界面中的成员表现得像抽象,但实际上它们是抽象的吗?我的意思是我不需要使用该关键字,所以我不确定它是隐含的还是它们在技术上不是抽象的...希望它有意义

4 个答案:

答案 0 :(得分:5)

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

话虽如此,它们的行为与类中的抽象成员非常相似 - 实现接口的任何类型都必须实现成员或者本身是抽象的。

答案 1 :(得分:2)

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

从技术意义上讲,它们不是abstract,因为只有类abstract

答案 2 :(得分:2)

不。隐式抽象方法是虚拟的。

接口实现不需要是虚拟的。 (实际上,有可能明确地实现'冲突'接口(即声明相同成员签名的接口)。vtable single dispatch [1]无法实现这一点,因为单个vtable槽无法填充两次

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

答案 3 :(得分:0)

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

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