Объясните почему возникает ошибка на этапе выполнения?
namespace CSharp
{
internal class B { }
internal class D : B { }
internal class Program
{
private static void Main()
{
Object o1 = new Object();
B b1 = new B();
D d6 = (D)b1; //System.InvalidCastException - не удалось привести тип объекта "CSharp.B" к типу "CSharp.D"
B b5 = (B)o1; //System.InvalidCastException - не удалось привести тип объекта "CSharp.Object" к типу "CSharp.B"
}
}
}
Ответ
Все просто, переменная b1 ссылается на объект типа B. Тип B в свою очередь является базовым для типа D, т.е. D является производным от B. Привести объект базового типа к более производному нельзя.
D d6 = (D)b1;
Аналогичная проблема и с этой строчкой
B b5 = (B)o1;
P.S. Небольшое замечание, если мы напишем следующий код:
B b = new D();
D d = (D)b;
и попробуем его выполнить, ошибки не будет. Здесь важно понимать следующее, что несмотря на то, что переменная b у нас типа B, она ссылается на объект типа D, поэтому приведение к типу D сработает. Т.е. строчка ниже выполнится без проблем.
D d = (D)b; // все ОК
Комментариев нет:
Отправить комментарий