Методы С# в интерфейсах объявляются без использования ключевого слова virtual
и переопределяются в производном классе без использования ключевого слова override
.
Есть ли причина для этого? Я предполагаю, что это просто удобство на языке, и, очевидно, CLR знает, как справиться с этим в рамках обложки (методы по умолчанию не являются виртуальными), но есть ли другие технические причины?
Вот IL, который производный класс генерирует:
class Example : IDisposable {
public void Dispose() { }
}
.method public hidebysig newslot virtual final
instance void Dispose() cil managed
{
// Code size 2 (0x2)
.maxstack 8
IL_0000: nop
IL_0001: ret
} // end of method Example::Dispose
Обратите внимание, что метод объявлен virtual
final
в IL.