Upcasting e Downcasting:
Upcasting: Casting de Classe Derivada para Classe Base Downcasting: Casting de Classe Base para Classe Derivada
Vamos entender o mesmo como exemplo:
Considere duas classes Shape como minha classe pai e Circle como uma classe derivada, definidas da seguinte maneira:
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 = nova forma ();
Círculo c = s;
Ambos c e s estão referenciando o mesmo local de memória, mas ambos têm visualizações diferentes, ou seja, usando a referência "c" você pode acessar todas as propriedades da classe base e classe derivada também, mas usando a referência "s" você pode acessar as propriedades da única classe pai.
Um exemplo prático de upcasting é a classe Stream, que é a classe base de todos os tipos de leitor de stream da estrutura .net:
Leitor StreamReader = novo StreamReader (novo FileStreamReader ());
aqui, FileStreamReader () é atualizado para streadm reder.
Downcasting:
Forma s = novo círculo (); aqui, como explicado acima, a visão de s é o único pai, a fim de torná-lo para ambos, pai e filho, precisamos diminuir
var c = (círculo) s;
O exemplo prático de Downcasting é a classe de botão do WPF.
Employee emp= mgr;
deve ser suficiente.