Двумя наиболее важными понятиями в C# являются виртуальные и абстрактные ключевые слова.
Какая разница?
Виртуальные методы
Виртуальные методы имеют реализацию и предоставляют производным классам возможность ее переопределения. Виртуальные методы могут иметь код, который обычно является реализацией чего-либо по умолчанию, и любые подклассы МОГУТ переопределять метод с помощью модификатора переопределения и предоставлять пользовательскую реализацию.
Абстрактные методы
Абстрактные методы не обеспечивают реализацию и заставляют производные классы переопределять метод. Таким образом, абстрактные методы не содержат реального кода, и подклассы ДОЛЖНЫ переопределять метод.
public abstract class E
{
public abstract void AbstractMethod(int i);
public virtual void VirtualMethod(int i)
{
// Default implementation which can be overridden by subclasses.
}
}
public class D : E
{
public override void AbstractMethod(int i)
{
// You HAVE to override this method
}
public override void VirtualMethod(int i)
{
// You are allowed to override this method.
}
}
Резюме:
Виртуальные методы
- Виртуальный метод может находиться в абстрактном и неабстрактном классе.
- Нет необходимости переопределять виртуальный метод в производном, но это возможно.
- Виртуальный метод должен иметь тело ….может быть переопределен с помощью «ключевого слова переопределения»
Абстрактные методы
- Абстрактный метод находится в абстрактном классе и не имеет тела.
- Абстрактный метод должен быть переопределен в неабстрактном дочернем классе.