gpt4 book ai didi

c# - 将父类转换到子类

转载 作者:太空狗 更新时间:2023-10-29 22:04:15 27 4
gpt4 key购买 nike

我有 Message 类,我已经扩展并添加了新属性。

class ChildMessage: Message 
{
prop...
}

在尝试将 Message Class 添加到 ChildMessage 列表时,我得到了添加类的 Null 引用。

var myChildList =new List<ChildMessage> ();
var myParentClass = new Message();
myChildList.add(myParentClass as ChildMessage)

myChildList[0] == null //Always return null

我的代码有什么问题?有哪些替代方案?

最佳答案

这是因为 Message 的真实实例不是 ChildMessage,而 ChildMessage 的实例是 Message.

除非 myParentClass 实际上 使用 ChildMessage 实例化,否则您不能使用转换运算符强制进行正向转换,因为实际的基础类型是 消息

也就是说,有 implicitexplicit 转换运算符可用于类型,因此您也许可以创建一个接受 Message 的运算符并输出一个 ChildMessage

http://msdn.microsoft.com/en-us/library/85w54y0a.aspx


知道您已获得这些类型并且您别无选择只能使用它们,因此您有两种选择来扩展该类型。

第一个选项

使用装饰器/包装器模式将 Message 包装在 ChildMessage 中:

class ChildMessage
{
private Message _innerMessage;

public ChildMessage(Message innerMessage)
{
_innerMessage = innerMessage;
}
}

然后您可以通过 ChildMessage 类公开 Message 或其属性。

第二个选项

这也是可行的,继承自 Message,但是当你想从 Message 中创建一个 ChildMessage 时,你需要转换它,而不是转换它:

class ChildMessage : Message
{
public ChildMessage(Message m)
{
// Instantiate properties by copying from m
}
}

关于c# - 将父类转换到子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9598381/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com