Это означает, что метод GetObjectData
на этом интерфейсе является виртуальным. По умолчанию все методы на C# интерфейсах являются виртуальными.
Например, если есть интерфейс:
interface IMyInterface
{
void MyMethod();
}
IL интерфейса:
.class interface nested private auto ansi abstract IMyInterface
{
// Methods
.method public hidebysig newslot abstract virtual
instance void MyMethod () cil managed
{
} // end of method IMyInterface::MyMethod
} // end of class IMyInterface
MyMethod
по умолчанию помечен как virtual
.
Это не означает, что когда интерфейс реализуется классом, метод класса все равно будет виртуальным. Вам нужно явно добавить ключевое слово virtual
к методу в вашем классе реализации, чтобы сделать его виртуальным, если метод должен быть виртуальным.
ОБНОВЛЕНИЕ
IL реализации по умолчанию MyMethod
:
.method public final hidebysig newslot virtual
instance void MyMethod () cil managed
{
// Method begins at RVA 0x2050
// Code size 2 (0x2)
.maxstack 8
IL_0000: nop
IL_0001: ret
} // end of method MyClass::MyMethod
Реализация по умолчанию final
и virtual
, Это означает, что метод не может быть переопределен в производных классах по умолчанию. Добавление ключевого слова virtual
к методу реализации удаляет final
.