Ключова разлика: Абстрактните методи са методите, които са декларирани, но нямат реализация. Използват се виртуални методи за прилагане на полиморфизъм, базиран на типа. Извлеченият клас има гъвкавост при повторното прилагане на виртуалния метод на базовия клас, като използва ключовата дума 'override'.
Например -
публичен абстрактен клас exampleAbstractClass
{
публично абстрактно void exampleabstractMethod ();
публичен виртуален void nonAbstractMethod ()
{
Console.WriteLine ("Изпълнението е дефинирано в метода");
}
class normalNonAbstractClass: exampleAbstractClass
{
обществено отмяна void exampleabstractMethod ()
{
Console.WriteLine ("Презаписване на exampleabstractMethod на класа exampleAbstractClass");
}
}
клас База
{
публичен виртуален void Test ()
{
Console.WriteLine ( "Base.Test");
}
}
клас Извлечен: База
{
обществен отмяна void Test ()
{
Console.WriteLine ( "Derived.Test");
}
}
Използват се виртуални методи за прилагане на полиморфизъм, базиран на типа. Извлеченият клас има гъвкавост при повторното прилагане на виртуалния метод на базовия клас, като използва ключовата дума override. И виртуалният, и абстрактният не могат да се използват заедно със статични или виртуални модификатори или модифициращи функции.
Сравнение между виртуалния и абстрактния метод:
Виртуален метод | Абстрактен метод | |
дефиниция | Използват се виртуални методи за прилагане на полиморфизъм, базиран на типа. | Абстрактните методи са методите, които са декларирани, но нямат реализация. |
изпълнение | Да, може да има изпълнение | Не, не може да има изпълнение |
Трябва да бъде отменено | Не е задължително | задължителен |
Ключовата дума, използвана за разграничаване от други методи | Виртуален | абстрактен |
клас | Виртуалният метод, съдържащ клас, може да бъде инстанциран. | Клас, съдържащ абстрактен метод, не може да бъде инстанциран. Тя може да се наследи само. |
Обхват | Обхват на виртуалния метод само за членовете. | Обхват на абстрактния метод за членове и класове. |
Метод, който трябва да бъде изпълнен (тип клас на обектна база) | Родителската реализация ще бъде извиквана само в случай, че в конкретния клас не е предвидено изпълнение. | Конкретно изпълнение |
Метод, който трябва да бъде изпълнен (обект-конкретен тип клас) | Конкретно изпълнение | Конкретно изпълнение |