2016-05-10 62 views
5

ho 3 classi strega eredita un'altra classe chiamata ParentClass e ciascuno dei 3 ha il seguente codice all'internometodo di chiamata e disegnare

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

Nella mia forma principale che ho una variabile come questo ParentClass PClass = new OneOfTheThreeClasses

Come posso chiamare il metodo DrawBAckground di quelle classi usando quella variabile, dall'evento paint del mio modulo?

+0

Ulteriori informazioni sui metodi virtuali. –

+0

Ti rendi conto che chiamare un metodo di questo tipo su un'altra classe, passando in 'Grafica' e' Rettangolo', comporterà solo che il modulo chiamante venga dipinto? – adv12

+0

@ adv12 Sì, lo so che – Adrao

risposta

4

Creare un metodo astratto o virtuale su ParentClass. Qualcosa di simile a questo:

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

Poi nelle classi figlie, ignorare tale metodo:

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

L'idea è che ParentClass ha bisogno di definire le operazioni che possono essere eseguite su di esso o qualsiasi versione polimorfa di esso (come un tipo di bambino). Non deve necessariamente fornire un'implementazione (e la definizione può essere astratta o virtuale a seconda di come lo stesso ParentClass viene implementato e utilizzato), ma è necessario "conoscere" il metodo in qualche modo affinché tutto possa essere per invocarlo su un'istanza di ParentClass.

+0

Grazie, ho appena controllato msdn, si scopre che molti metodi in VS sono virtuali, quindi possono essere sovrascritti ancora e ancora .. – Adrao