gpt4 book ai didi

c# - 如何处理一个类的不同修订?

转载 作者:行者123 更新时间:2023-12-04 16:57:05 26 4
gpt4 key购买 nike

我目前正在构建一个测试客户端,它需要通过计划 TCP 将数据作为 JSON 发送到服务器应用程序。该协议(protocol) - 除了其他元素 - 由消息对象组成。现在,已经需要对 Message 类进行两个不同的修订。它们彼此不相关并且具有完全不同的属性。

这是一个获得想法的示例:

协议(protocol)版本 1

class Message
{
public string sender { get; set; }
public int message_id { get; set; }
public string text { get; set; }
public int priority { get; set; }
public List<string> parameters { get; set; }
public Message()
{
this.parameters = new List<string>();
}
}

协议(protocol)版本 2
class Message
{
public int id { get; set; }
public int someotherid { get; set; }
public List<string> data { get; set; }
public Message()
{
this.data = new List<string>();
}
}

这些类没有任何共同点,它们不共享一个共同的基类型或其他东西。如果我仍然想同时使用它们作为 Message 我将如何组织这些不同的版本在我的代码中?

我唯一想到的是使用不同的命名空间,所以第一个版本存在于 MyProtocol.Rev1.Message 中。另一个在 MyProtocol.Rev2.Message .这会起作用,我可以简单地在 using 中拉入所需的命名空间部分,但它有点静态。有没有更好的办法?

最佳答案

这样的事情怎么样

    Message message = new Message();

var messagev1 = message.GetProtocol<IMessageProtocolv1>();
var messagev2 = message.GetProtocol<IMessageProtocolv2>();

messagev1.message_id = 450077;
messagev2.id = 1000023;

要做到这一点
   interface IMessage
{
}

interface IMessageProtocolv1 : IMessage
{
string sender { get; set; }
int message_id { get; set; }
string text { get; set; }
int priority { get; set; }
List<string> parameters { get; set; }

}

interface IMessageProtocolv2 : IMessage
{
int id { get; set; }
int someotherid { get; set; }
List<string> data { get; set; }

}

abstract class MessageBase : IMessageProtocolv1, IMessageProtocolv2
{
public abstract string sender { get; set; }
public abstract int message_id { get; set; }
public abstract string text { get; set; }
public abstract int priority { get; set; }
public abstract List<string> parameters { get; set; }
public abstract int id { get; set; }
public abstract int someotherid { get; set; }
public abstract List<string> data { get; set; }
}

class Message : MessageBase
{
public Message()
{
this.parameters = new List<string>();
this.data = new List<string>();
}

public override string sender { get; set; }
public override int message_id { get; set; }
public override string text { get; set; }
public override int priority { get; set; }
public override List<string> parameters { get; set; }
public override int id { get; set; }
public override int someotherid { get; set; }
public override List<string> data { get; set; }

public T GetProtocol<T>()
{
return (T)(object)this;
}
}

关于c# - 如何处理一个类的不同修订?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60052376/

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