nie w realizacji podstawowej - czy chcesz użyć zamiast enkapsulacji.
Jednak jeśli używasz tylkoprotobuf-net, kod pierwszego, ja siekać wokół niego:
[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>()); }
}
}
Oczywiście, jestem zakładając, że istnieje kilka dodatkowych szczegółów w klasach - „tak jak jest "można po prostu użyć enum (który jest dobrze obsługiwany przez ,).
Dobra dyskusja znajduje się w tym poście na blogu: http://www.indelible.org/ink/protobuf-polymorphism/ – earcam