gpt4 book ai didi

c# - 如何将父类引用的子类更改为具有子类的引用类型?

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:00 24 4
gpt4 key购买 nike

我有 20 个左右的事件类,它们都继承自 EventDto。这些子类都在被序列化/反序列化(使用 DataContractJsonSerializer,每个子类被添加为 [KnownType(typeof(subclasstype))] 属性),反序列化方法如下所示:

private EventDto DeserializeMessage(byte[] body)
{
var stream = new MemoryStream(body);
var serializer = new DataContractJsonSerializer(typeof(EventDto));

var eventDto = (EventDto)serializer.ReadObject(stream);

return eventDto;
}

反序列化一个事件后,我需要根据它的类型来处理它。所以我有:

public void ProcessMessage(byte[] serializedEvent)
{
//Deserialize
var eventDto = DeserializeMessage(serializedEvent);

//Process
Process(eventDto);
}

public void Process(EventDto eventDto)
{
//Do nothing
}

public void Process(EventDtoSubclass1 eventDto)
{
//Do something
}

public void Process(EventDtoSubclass2 eventDto)
{
//Do something different
}

问题是ProcessMessage()中的eventDto有一个EventDto的引用类型,所以调用的Process()方法总是一样的。我需要能够区分 EventDto 的不同子类并调用适当的方法。

有什么方法可以将 ProcessMessage() 中的 eventDto 类型从 EventDto 更改为其实际派生类型(例如,EventDtoSubclass2)?

最佳答案

最简单的方法是使用 is 运算符。

public void Process(EventDto eventDto)
{
//Do nothing
if (eventDto is EventDtoSubclass1)
{
// do something
}
else if (eventDto is EventDtoSubclass2)
{
// do something else
}
}

关于c# - 如何将父类引用的子类更改为具有子类的引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17733204/

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