以下将编译但抛出异常:
public class a
{
public string foo { get; set; }
}
public class b : a
{
}
public class test()
{
void Main()
{
b bar = (b)new a();
}
}
是构建b
新实例的唯一选项,然后从a
手动复制每个属性/字段吗?
答案 0 :(得分:3)
问题是a
不是b
的实例。你所做的基本上是说Animal
是Dog
或Tool
是Hammer
,而实际上它是相反的。
答案 1 :(得分:1)
使用'as': b = new a()as b; 请注意在使用'as'后检查b是否为null。 在你的情况下,你尝试进行upcasting,因为b继承自你的情况不可能。 如果你试图获得polimorfisem,你可以做一个= new b()作为;
答案 2 :(得分:1)
你不能在C#中这样高速播放并期望有效的结果。
如果b
添加新成员,则a
对象不会突然拥有它们,但是您尝试投射它们。
说b
添加了buzz()
方法。假设你的演员实际上有效。致电bar.buzz()
时会发生什么?
答案 3 :(得分:0)
你应该以其他方式使用它(如ChaosPandion所提到的)
a bar = new b();