2011-09-24 14 views
6

Mam klasy bazowej, które chcę zapewnić pewne "podstawowe" funkcjonalności dla metod dla wszystkich dziedziczących klas.Różnica między nowym a przesłonięciem?

W moich klasach dziedziczących chcę zrobić:

public override void Setup() 
{ 
    base.Setup(); 
} 

Ale w tej chwili mówi muszę użyć nowego słowa kluczowego.

Jak to zrobić, więc muszę użyć słowa kluczowego override?

Czy jest jakaś różnica między tym, jak jest obecnie ze mną przy użyciu słowa kluczowego new i przy użyciu override?

+3

http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx – MPelletier

+1

możliwy duplikat [C# słowo kluczowe użycie wirtualne + zastąpienie vs. nowe] (http: // stackoverflow.com/questions/159978/c-keyword-usage-virtualoverride-vs-new) – MPelletier

+0

dziękuję, że był świetny link – Blankman

Odpowiedz

7

Mówi tak, ponieważ nie zadeklarowałeś metody bazowej virtual. Po wykonaniu tej czynności para słów kluczowych będzie miała sens. W tej chwili kompilator narzeka, że ​​nie można uzyskać metody override w sposób inny niż override.

+3

... i tylko "wirtualne" metody mogą być nadpisane. –

4

Po użyciu słowa kluczowego zastąpienia, metoda pochodna jest używana nawet wtedy, gdy instancja jest przekazywana jako typ klasy bazowej. Dlatego też musi istnieć wirtualna klasa podstawowa, aby program wiedział, że musi dokonać sprawdzenia, jaki jest rzeczywisty typ instancji. Następnie sprawdza, jaki jest rzeczywisty typ i czy jest to typ wyprowadzony, sprawdza, czy jest to nadpisanie w klasie pochodnej dla tej konkretnej metody w klasie bazowej.

Ukrywanie członków jest inne. Podstawowy element będzie ukryty tylko wtedy, gdy zostanie przekazany jako instancja klasy pochodnej. Jeśli obiekt zostanie przekazany jako klasa podstawowa, nadal będzie używana metoda klasy bazowej. Jeśli ukryjesz członka, otrzymasz ostrzeżenie, jeśli nie używasz nowego słowa kluczowego. Nowe słowo kluczowe jest po prostu informacją o tym, że kompozytor naprawdę chce ukryć metodę typu podstawowego.

Powiązane problemy