就像我在C#中所做的那样:
class DerivedClass : BaseClass {}
有没有办法用原型文件中的消息重新创建这种行为?
这样DerivedClass
的类型为BaseClass
,并且可以继承其属性。
我尝试extend
我的基本信息,但这会产生不同的结果。
答案 0 :(得分:1)
如果我们假设这是:
[ProtoContract]
[ProtoInclude(7, typeof(DerivedClass))]
public class BaseClass {}
[ProtoContract]
public class DerivedClass : BaseClass {}
然后我们可以使用:
string proto = Serializer.GetProto<BaseClass>();
了解protobuf-net如何解释它:
message BaseClass {
// the following represent sub-types; at most 1 should have a value
optional DerivedClass DerivedClass = 7;
}
message DerivedClass {
}
这实际上可以很好地映射到新的oneof
- 简单地说,GetProto
尚未更新以使用新语法(但它不会影响输出)。但以下也是等同的:
message BaseClass {
oneof subtypes {
// the following represent sub-types; at most 1 should have a value
DerivedClass DerivedClass = 7;
AnotherDerivedClass AnotherDerivedClass = 8;
AndOneMoreForLuck AndOneMoreForLuck = 9;
}
}
message DerivedClass {
}
message AnotherDerivedClass {
}
message AndOneMoreForLuck {
}