протобуф с наследованием? - PullRequest
8 голосов
/ 20 января 2011

Можно ли использовать protobuf с классами, которые наследуют?

Я хочу сделать что-то вроде этого

class Expr;
class AddExpr : Expr;
class CallFunc: Expr;

class FunctionBody{
    repeatable Expr expr;
}

1 Ответ

10 голосов
/ 20 января 2011

Не в базовой реализации - вместо этого вы хотели бы использовать инкапсуляцию.

Однако, если вы используете просто protobuf-net в качестве первого кода,Я взломал это:

[ProtoInclude(1, typeof(AddExpr))]
[ProtoInclude(2, typeof(CallFunc))]
[ProtoContract]
class Expr {}

[ProtoContract]
class AddExpr : Expr {} 
[ProtoContract]
class CallFunc: Expr {}

[ProtoContract]
class FunctionBody{
    private List<Expr> expressions;
    [ProtoMember(1)]
    public List<Expr> Expressions {
        get { return expressions ?? (expressions = new List<Expr>()); }
    }
}

Конечно, я предполагаю, что есть некоторые дополнительные детали в классах - "как есть", вы можете просто использовать enum (который равен хорошоПоддержанные).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...