2011-01-20 3 views
8

継承するクラスにprotobufを使用することはできますか?protobuf?

私はコア実装では、この

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

class FunctionBody{ 
    repeatable Expr expr; 
} 
+0

よくある議論は、このブログの記事で見つけることができます:http://www.indelible.org/ink/protobuf-polymorphism/ – earcam

答えて

10

ないような何かをしたい - あなたの代わりにカプセル化を使用したいと思います。

は、しかし、あなたがを使用している場合だけ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を使用することができます(です)。