Что делает конструкция (TypeA)TypeB в С#?
Изучая исходники я нашёл такой код:
Recipe silk = new Recipe(((Item)silk).itemID)
где класс Silk - наследует класс Item со свойством ItemID.
Так вот меня интересует конструкция (Item)silk, которая по моему предположению возвращает екземпляр родительского класса с дочернего. Как называется эта конструкция, что она на самом деле делает?
Ответы (1 шт):
Экземпляр класса, то есть объект как был Silk, так и остается. Никаких действий с объектом не производится.
Операция эта называется приведение типа, а если конкретнее - приведение типа к родителю или апкаст. Здесь изменяется только тип ссылки на объект.
Работает это все по принципу ООП "наследование".
Например, есть базовый класс и его наследник.
public class A { }
public class B : A { }
Например если создать
A a = new A();
B b = new B();
То можно сделать так (апкаст)
A ba = (A)b;
При этом возможна обратная операция (даункаст)
B bb = (B)ba;
А вот такая операция невозможна и выдаст InvalidCastException во время выполнения.
B ab = (B)a; // Ошибка
А все потому что здесь имеет значение реальный тип объекта, на который ссылается переменная. Повторюсь, что с самим объектом при этом ничего не происходит, он остается без изменений.