为什么我不能将基类转换为派生类?另外,为什么编译器没有抓住这个?
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Parent p = new Parent();
Child c = (Child)p;
}
}
class Parent
{
public string Data { get; set; }
}
class Child : Parent
{
public string OtherDate { get; set; }
}
}
答案 0 :(得分:0)
p
是Parent
的一个实例,因此您无法告诉运行时将其解释为一个。
编译器没有捕获它,因为像这样的代码
Parent p = new Child();
Child c = (Child)p;
并且编译器不进行捕获它所需的静态代码分析。不检查的原因是:
耗费时间
它只能捕获一些错误实例。