我有Message类,我已经扩展并添加了新属性.
class ChildMessage: Message
{
prop...
}
Run Code Online (Sandbox Code Playgroud)
在尝试将Message Class添加到ChildMessage列表时,我获得了添加类的Null引用.
var myChildList =new List<ChildMessage> ();
var myParentClass = new Message();
myChildList.add(myParentClass as ChildMessage)
myChildList[0] == null //Always return null
Run Code Online (Sandbox Code Playgroud)
我的代码出了什么问题?有哪些替代方案?
Ada*_*rth 18
这是因为真实的实例Message不是a ChildMessage,而实例ChildMessage是a Message.
除非myParentClass是实际实例化ChildMessage你不能使用强制转换运算符,迫使向前塑像作为实际的基础类型Message.
也就是说,可以在类型上使用implicit和explicit构建运算符,因此您可以创建一个可以Message输出和输出的运算符ChildMessage.
http://msdn.microsoft.com/en-us/library/85w54y0a.aspx
知道你有这些类型,你别无选择,只能使用它们,你有两个选择,以扩展该类型.
第一选择
使用装饰器/包装器模式包装Message内部ChildMessage:
class ChildMessage
{
private Message _innerMessage;
public ChildMessage(Message innerMessage)
{
_innerMessage = innerMessage;
}
}
Run Code Online (Sandbox Code Playgroud)
然后Message通过ChildMessage类公开它或它的属性.
第二选择
这是可行的,继承自Message,但是当你想要制作a时ChildMessage,Message你需要转换它,而不是转换它:
class ChildMessage : Message
{
public ChildMessage(Message m)
{
// Instantiate properties by copying from m
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11222 次 |
| 最近记录: |