这是因为有一个真实的例子Message
不是一个ChildMessage
,而一个实例ChildMessage
is a Message
.
Unless myParentClass
is actually实例化为ChildMessage
您不能使用强制转换运算符来强制向前转换,因为实际的基础类型是Message
.
也就是说,有implicit
and explicit
强制转换运算符可用于类型,因此您也许可以创建一个需要Message
并输出一个ChildMessage
.
http://msdn.microsoft.com/en-us/library/85w54y0a.aspx http://msdn.microsoft.com/en-us/library/85w54y0a.aspx
知道您已经获得了这些类型并且您别无选择,只能使用它们,因此您有两种选择来扩展该类型。
第一个选项
使用装饰器/包装器模式来包装Message
里面一个ChildMessage
:
class ChildMessage
{
private Message _innerMessage;
public ChildMessage(Message innerMessage)
{
_innerMessage = innerMessage;
}
}
然后您公开Message
或其属性通过ChildMessage
class.
第二个选项
这也是可行的,继承自Message
,但是当你想做一个ChildMessage
from a Message
你需要转换它,不投射它:
class ChildMessage : Message
{
public ChildMessage(Message m)
{
// Instantiate properties by copying from m
}
}