Upcasting e Downcasting:
Upcasting: Casting da Classe Derivata a Classe Base Downcasting: Casting da Classe Base a Classe Derivata
Comprendiamo lo stesso come un esempio:
Considera due classi Shape come classe genitore e Circle come classe derivata, definite come segue:
class Shape
{
public int Width { get; set; }
public int Height { get; set; }
}
class Circle : Shape
{
public int Radius { get; set; }
public bool FillColor { get; set; }
}
Upcasting:
Forma s = nuova forma ();
Cerchio c = s;
Sia c che s fanno riferimento alla stessa posizione di memoria, ma entrambi hanno viste diverse cioè usando il riferimento "c" puoi accedere a tutte le proprietà della classe base e anche della classe derivata ma usando il riferimento "s" puoi accedere alle proprietà dell'unica classe genitore.
Un esempio pratico di upcasting è la classe Stream che è la classe base di tutti i tipi di lettori di stream di .net framework:
Lettore StreamReader = nuovo StreamReader (nuovo FileStreamReader ());
qui, FileStreamReader () viene upcast in streadm reder.
Abbattimento:
Forma s = nuovo cerchio (); qui come spiegato sopra, la vista di s è l'unico genitore, per renderla sia per il genitore che per un figlio dobbiamo abbatterla
var c = (Circle) s;
L'esempio pratico di downcasting è la classe dei pulsanti di WPF.
Employee emp= mgr;
dovrebbe essere sufficiente.