2011-01-20 23 views
8

protobuf kullanmak mümkün olan sınıfları kullanmak mümkün mü?protobuf?

Ben Değil çekirdek uygulamasında bu

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

class FunctionBody{ 
    repeatable Expr expr; 
} 
+0

Bu blogda iyi bir tartışma bulunabilir: http://www.indelible.org/ink/protobuf-polymorphism/ – earcam

cevap

10

böyle bir şey yapmak istiyorum - bunun yerine kapatma sistemleri kullanılması isteyeyim. Ancak

sadeceprotobuf-netkullanıyorsanız gibi kod birinci, ben onun etrafında kesmek:

Tabii
[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>()); } 
    } 
} 

, ben sınıflarında bazı ek detay var varsayıyorum - "olduğu gibi "Sadece bir enum kullanabilirsiniz ( iyi desteklenmiştir).

İlgili konular