美文网首页
protobuf官方C#版本的额外扩展方案

protobuf官方C#版本的额外扩展方案

作者: 卅云川 | 来源:发表于2020-09-14 10:43 被阅读0次

    根据上一篇关于protobuf的官方C#版本额外扩展记录,当改造完成后,结合实际C#开发(我主要使用Unity进行开发)需求,其实我们还可以做很多事情。

    官方生成C#后预留的空间

    当我们使用protoc的--csharp_out生成PB的C#代码之后,大体结构是这样的:

    public sealed partial class MSG : pb::IMessage<MSG> {}
    

    通过具体pb消息的代码,我们可以发现有两点可以助力我们对他进行扩展:

    1. 生成的消息类被partial关键字声明;
    2. 生成的消息继承自接口pb::IMessage

    我们后续的扩展,便是建立在这两条的基础之上。

    我们需要为消息定义ID

    基于PB消息声明为partial且继承于接口这一事实,我的思路是:将PB继承自一个基类,且使用partial实现

    为此,我们先声明一个MsgBase

    public abstract class MsgBase
    {
        public virtual int Msgid => 0;
    }
    

    msgid设定为virtual,是基于我们自己的需求,可以根据自身需求进行调整。

    这样,便可以根据之前解析FileDescriptorSet所得到的的数据,自己生成对应的C#文件即可。比如之前的MSG类,就可以扩展生成如下代码:

    public sealed partial class MSG : MsgBase
    {
        public override int Msgid => 1001;
    }
    

    关于代码自动生成

    这是之前走过的一个坑,所以碎碎念一下:使用的是C#的Razor,不过不得不吐槽,在非windows环境下使用这些简直是一场噩梦。

    好了全篇到此结束,希望这些记录能带给一些人以启发,也算这篇文章有价值了。

    相关文章

      网友评论

          本文标题:protobuf官方C#版本的额外扩展方案

          本文链接:https://www.haomeiwen.com/subject/efwaektx.html