2016-05-10 22 views
5

mam 3 klasy czarownica dziedziczą innej klasy o nazwie ParentClass i każdy z 3 ma następujący kod wewnątrzmetoda połączenia i wyciągnąć

public void DrawBackground(Graphics e, Rectangle rect) 
{ 
    e.FillRectangle(Brushes.Red, rect); 
} 

W moim formularzu głównym mam zmienną jak ten ParentClass PClass = new OneOfTheThreeClasses

Jak Czy mogę wywołać metodę tych klas przy użyciu tej zmiennej, z zdarzenia malowania mojego formularza?

+0

Dowiedz się więcej o metodach wirtualnych. –

+0

Czy zdajesz sobie sprawę, że wywoływanie takiej metody na innej klasie, przechodząc w "Grafika" i "Prostokąt", spowoduje tylko, że zostanie wywołany formularz wywołujący? – adv12

+0

@ adv12 Tak, wiem, że – Adrao

Odpowiedz

4

Utwórz metodę abstrakcyjną lub wirtualną na ParentClass. Coś takiego:

public virtual void DrawBackground(Graphics e, Rectangle rect) 
{ 
    // do nothing 
} 

Następnie w klasach potomnych, przesłonić tę metodę:

public override void DrawBackground(Graphics e, Rectangle rect) 
{ 
    e.FillRectangle(Brushes.Red, rect); 
} 

Chodzi o to, że ParentClass musi zdefiniować operacje, które można wykonać na nim ani polimorficzny wersją niego (taki jak typ dziecka). Nie musi koniecznie dostarczać implementacji (a definicja może być abstrakcyjna lub wirtualna w zależności od tego, w jaki sposób jest implementowana i używana), ale musi "wiedzieć" o niej w jakiś sposób, aby wszystko było możliwe aby wywołać go na instancji ParentClass.

+0

Dzięki, właśnie sprawdziłem msdn, okazuje się, że wiele metod w VS jest wirtualnych, więc można je przesłonić raz za razem .. – Adrao