Najpierw należałoby wytłumaczyć czym jest słówko virtual. Zacznijmy więc !
Virtual - używa się go do metod i oznacza ono, że klasa pochodna dziedzicząca z klasy bazowej może przesłonić tą metodę.
Override- przesłania metodę z klasy bazowej, która posiada metodę virutal. Zmienia funkcjonalność w klasie bazowej. W klasie pochodnej metoda ta posiada taką samą nazwę, parametry oraz wartość zwrotną. Przykładowe metody na których można użyć override to:
ToString()
Equals()
GetHashCode()
New - zakrywa oryginalną metodę, ta nie musi być virtual. Dostarcza nową funkcjonalność, powinno się używać w bardzo koniecznych sytuacjach. Kiedy zakryjemy metodę mamy wciąż dostęp do oryginalnej metody poprzez rzutowanie na klasę bazową.
Przykładowy kod, aby lepiej zrozumieć to zagadnienie:
public interface IUndoable
{
void Undo();
}
public class Textbox : IUndoable
{
public virtual void Undo() => Console.WriteLine("TextBox.Undo");
}
public class RichTextBox : Textbox
{
public override void Undo() => Console.WriteLine("RichTextBox.Undo");
}
public class ExtraTextBox : Textbox
{
public new void Undo() => Console.WriteLine("ExtraTextBox.Undo");
}
Wyrażenie lambda ( => ) działa w tym wypadku jak return.
Wywołując w Main:
RichTextBox richText = new RichTextBox();
richText.Undo(); //RichTextBox.Undo
((Textbox)richText).Undo(); //to samo wypisze co wyżej
((IUndoable)richText).Undo(); //tutaj też
Console.WriteLine();
ExtraTextBox extra = new ExtraTextBox();
extra.Undo(); //ExtraTextBox.Undo
((Textbox)extra).Undo(); //TextBox.Undo
((IUndoable)extra).Undo(); //TextBox.Undo
Korzystając z serwisu akceptujesz regulamin
oraz politykę prywatności.
Używamy informacji zapisanych za pomocą plików cookies w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu.
Jeśli nie wyrażasz zgody, ustawienia dotyczące plików cookies możesz zmienić w swojej przeglądarce.
Najpierw należałoby wytłumaczyć czym jest słówko virtual. Zacznijmy więc !
Virtual - używa się go do metod i oznacza ono, że klasa pochodna dziedzicząca z klasy bazowej może przesłonić tą metodę.
Override - przesłania metodę z klasy bazowej, która posiada metodę virutal. Zmienia funkcjonalność w klasie bazowej. W klasie pochodnej metoda ta posiada taką samą nazwę, parametry oraz wartość zwrotną. Przykładowe metody na których można użyć override to:
New - zakrywa oryginalną metodę, ta nie musi być virtual. Dostarcza nową funkcjonalność, powinno się używać w bardzo koniecznych sytuacjach. Kiedy zakryjemy metodę mamy wciąż dostęp do oryginalnej metody poprzez rzutowanie na klasę bazową.
Przykładowy kod, aby lepiej zrozumieć to zagadnienie:
Wyrażenie lambda ( => ) działa w tym wypadku jak return.
Wywołując w Main:
Otrzymamy: