No en la implementación de la base - que se desea utilizar en su lugar la encapsulación.
Sin embargo, si está utilizando simplemente protobuf-net, como código en primer lugar, me hackeo a su alrededor:
[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>()); }
}
}
Por supuesto, estoy suponiendo que existe algún detalle adicional en las clases - "tal como es "solo podría usar una enumeración (que es bien respaldada).
Una buena discusión se puede encontrar en esta publicación de blog: http://www.indelible.org/ink/protobuf-polymorphism/ – earcam