Upcasting и Downcasting:
Upcasting: кастинг из производного класса в базовый класс
Даункинг: каст из базового класса в производный класс
Давайте разберемся так же, как пример:
Рассмотрим два класса Shape как Мой родительский класс и Circle как Производный класс, определенный следующим образом:
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; }
}
Приведение к базовому типу:
Shape s = новая форма ();
Круг c = s;
Оба c и s ссылаются на одну и ту же ячейку памяти, но оба имеют разные представления, т.е. используя ссылку "c", вы можете получить доступ ко всем свойствам базового класса и производного класса, но используя ссылку "s", вы может получить доступ к свойствам только родительского класса.
Практическим примером upcasting является класс Stream, который является базовым классом всех типов потоковых ридеров .net framework:
StreamReader reader = новый StreamReader (новый FileStreamReader ());
здесь FileStreamReader () преобразуется в стред-ридер.
понижающее приведение:
Shape s = новый круг ();
здесь, как объяснено выше, представление s является единственным родителем, чтобы сделать его как для родителя, так и для ребенка, нам нужно уменьшить его
var c = (Круг) с;
Практическим примером Downcasting является класс кнопок WPF.