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

2020-09-14  本文已影响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环境下使用这些简直是一场噩梦。

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

上一篇下一篇

猜你喜欢

热点阅读