У меня есть один конкретный запрос с интерфейсами. По умолчанию методы интерфейса абстрактны и виртуальны, поэтому, если мы реализуем этот интерфейс и предоставляем определение в классе, мы фактически переопределяем этот метод, но когда мы снова помещаем этот метод как виртуальный в классе реализации, почему компилятор не считает, что мы действительно пытаемся чтобы скрыть виртуальный метод исходного интерфейса. Если у нас есть виртуальный метод в базовом классе, а производный класс снова помечен как виртуальный, в этом случае компилятор дает предупреждение о том, что вы скрываете метод базового класса, поэтому используйте новое, если вы намеренно скрывая метод базового класса.
public interface ITestInterface
{
void virtualmethod(); // this method is by default virtual.
}
public class TestInterface :ITestInterface
{
public virtual void virtualmethod()
{
// Now compiler should consider that i am actually hiding the interface virtual method.
}
}
если вы создадите вышеприведенный код для интерфейса и откройте в ILDASM, вы увидите такой код:
.method public hidebysig newslot abstract virtual
instance void virtualmethod() cil managed
{
}//end of method ITestInterface::virtualmethod