Không trong việc thực hiện cốt lõi - bạn sẽ muốn sử dụng đóng gói để thay thế.
Tuy nhiên nếu bạn đang sử dụng chỉprotobuf-net, như mã đầu tiên, tôi hack xung quanh nó:
[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>()); }
}
}
Tất nhiên, tôi giả sử có một số chi tiết bổ sung trong các lớp - "nguyên trạng "bạn chỉ có thể sử dụng một enum (trong đó là được hỗ trợ tốt).
Nguồn
2011-01-20 11:52:35
Có thể tìm thấy một cuộc thảo luận hay trong bài đăng trên blog này: http://www.indelible.org/ink/protobuf-polymorphism/ – earcam