C#: dubbi da libro

Sono andato a trovare i suoceri ad Ancona, e andando in stazione ho visto in edicola la guida su C# di "ioProgrammo": visto che mi aspettavano 5 ore di treno e non avevo con me il portatile ho deciso di fare questo investimento e comprarlo, per vedere se per caso c'era qualcosa di interessante.

L'introduzione non promette nulla di buona per uno che sviluppa in C# da 3 anni:

"Se siete programmatori C#, e siete già produttivi, questo libro non vi serve a niente. Perchè non avete comprato la rivista senza libro?"

Comunque, dopo le 5 ore di treno mi sono dovuto ricredere, ho scoperto parecchie cose che non conoscevo su C#, come la possibiltà di create di overloadare (ovviamente nelle proprie classi) i metodi di cast, sia implicito che esplicito, nella stessa maniera nella quale si possono overloadare gli operatori aritmetici e booleani.

Ovviamente, come ogni buon libro di programmazione, fa sorgere i suoi dubbi, e in particolare a me è sono sorto questo:

  • a cosa serve la keyword new quando si parla di polimorfismo?

new

Per ridefinire un metodo di una classe nella sua classe figlia si usa virtual nel padre e override nel figlio, però si può anche mettere la keyword new nella classe figlio omettendo la virtual.

Leggendo sul libro scopro che in realtà non sono la stessa cosa:

Ipotizziamo di avere due classi, Parete e CascataDiGhiaccio, dove CascataDiGhiaccio eretida da Parete, e il metodo Sosta.

public Parete {
    
public virtual String Sosta() {
        
return "Sosta Generica";
    }
}

public CascataDiGhiaccio: Parete {
    
    
// Caso 1
    
public override String Sosta() {
        
return "Sosta con chiodi da ghiaccio";
    }

    
// Caso 2
    
public new String Sosta() {
        
return "Sosta con chiodi da ghiaccio";
    }
    
}

//Caso 1

Parete parete = new CascataDiGhiaccio();
parete.Sosta(); 
//risultato "Sosta con chiodi da ghiaccio"

//Caso 2
Parete parete = new CascataDiGhiaccio();
parete.Sosta(); 
//risultato "Sosta Generica"

Come si vede dal codice sopra, usando il la coppia virtual/override si ottiene l'esecuzione sempre del metodo della classe derivata, mentre usando new ho l'esecuzione del metodo della classe del tipo di dato usato al momento (nel nostro caso Parete).

Visto che in genere si usa il polimorfismo per poter usare la caretteristiche specifiche delle classi figlie, che senso ha usare new, che nella modalità solita di utlizzo invece causa sempre l'esecuzione della classe padre?

powered by IMHO

posted @ lunedì 10 gennaio 2005 02:10

Print

Comments on this entry:

# re: C#: dubbi da libro

Left by Simone Chiaretta at 10/01/2005 19:04
Gravatar
A dire il vero non era insime a Io Programma, ma era da solo, in una confezione attaccata sul cartone verde.
Nella 3a di copertina c'è scritto "Finito di stampare a Maggio 2004", quindi magari non è recentissimo, magari è della scorsa primavera
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011