向上铸造 - c#

max*_*axp 11 .net c# casting

public class a{
  public string x1 {get;set;}
  public string x2 {get;set;}
  public string x3 {get;set;}
}

public class b:a{
}
Run Code Online (Sandbox Code Playgroud)

显然 var foo = (b)new a();会在运行时抛出一个转换错误.

我可以考虑分配已经实例化和填充的所有属性的唯一方法a是手动将每个属性复制到新的实例中b.

它是否正确?

VMA*_*Atm 5

这种类型的演员是错误的,因为你不能把父母送给他们的孩子.
关于类型的a元信息的类型不知道b.因此,您需要提供显式强制转换运算符来执行此类操作,但在这种情况下,您必须删除继承.
其他选项是定义一些界面,例如在其他问题中.

更多信息:
http://msdn.microsoft.com/en-us/library/ms173105.aspx
http://msdn.microsoft.com/en-us/library/85w54y0a.aspx

  • @VMAtm:2个不相关的类型都没问题.但尝试父母和孩子类型.KABOOM! (2认同)