2009-07-09 9 views
6

Rozumiem, że nadpisanie metody/funkcji przedefiniowuje jej implementację w klasie pochodnej od jej implementacji w klasie bazowej.Czy powinienem wywoływać implementację klasy podstawowej podczas przesłonięcia metody w języku C# dla ASP.NET?

Teraz co mnie niepokoi, to czy mogę nadpisać klasę w ASP.NET, takich jak CreateChildControls() (Podniosłem go losowo bez powodu), auto generuje VS2008:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

wystarczająco dobry, domyślna implementacja po prostu wywołuje klasę podstawową "CreateChildControls().

Więc jeśli chcę uruchomić jakiś kod, ponieważ nie wiem jak base.CreateChildControls(), należy zrobić to:

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

lub zignorować co base.CreateChildControls() całkowicie i po prostu zrobić

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

Odpowiedz

11

To zależy od Ciebie. Ogólnie rzecz biorąc, chcesz wywołać metodę klasy bazowej, ponieważ może ona zrobić wiele rzeczy, których nie znasz (szczególnie w klasie, której nie kontrolujesz ... zdobyć kontrolę). Ale jeśli jesteś bardzo pewny siebie nie potrzebujesz (lub chcesz) "rzeczy" klasy bazowej, możesz zdjąć połączenie.

+0

To naprawdę zaskakujące, że możesz pominąć klasę podstawową, której nie znasz. – Matt

+7

Muszę mieć tę wolność. To, że jestem twoim dzieckiem, nie oznacza, że ​​chcę robić wszystko tak, jak ty. Czasami muszę wyjść na świat i robić rzeczy po swojemu. Byłbyś nadopiekuńczym rodzicem, gdybyś zmusił mnie do wdrożenia. :) –

+0

Począwszy od tego, że wywołuję klasę podstawową podczas przesuwania w moim niestandardowym 'Kontroli', w odniesieniu do nadpisań' OnXxxx' zwykle otrzymuję to, co nazywam 'base.OnXxxx' na końcu mojej metody pochodnej. Czy istnieje jakaś reguła, czy wywołać metodę 'base.CreateChildControls' na początku lub na końcu metody pochodnej? – superjos

3

To jest po prostu kwestia, czy chcesz całkowicie zastąpić zachowanie lub dodać zachowanie.

Dla czegoś takiego jak CreateChildControls, prawdopodobnie zachowacie połączenie z klasą bazową.

1

to zależy od tego, co chcesz zrobić. Jeśli chcesz wywołać metodę base.CreateChildControls(), a następnie chcesz wykonać jakąś akcję niestandardową przed wywołaniem metody lub po niej, możesz to zrobić.

Jeśli chcesz mieć pełną kontrolę nad tym, co się dzieje, gdy wywoływana jest funkcja CreateChildControls, możesz po prostu zignorować wywoływanie jej w całości.

To, że jest tam domyślnie, jest dla ciebie tylko wskazówką.

0

To zależy czy chcesz zastąpić lub kompletną implementację podstawy ... w większości przypadków należy zadzwonić realizację podstawy (a na pewno powinien to zrobić w przypadku metody CreateChildItems ...)

0

Być może warto przyjrzeć się wzorowi template method. Chociaż nie można nic zrobić ze sposobu, w jaki są zaimplementowane klasy bibliotek, może to pomóc w zapewnieniu, że napisany kod jest łatwy w użyciu.