1

我认为我的问题与这个问题非常相似: Protobuf-net Creating typemodel with interface and abstract baseclass 然而 Marc 在这里给出的解决方案基本上将抽象类和接口的多重继承降低为单一继承设计。

对我来说问题是,我实际上需要像这样的多个接口继承:

interface ITestBase 
{
}
abstract class TestBase : ITestBase 
{
}
class TestTypeA : TestBase, ITestTypeA 
{
}
interface ITestTypeA 
{
}
class TestTypeB : TestBase, ITestTypeB 
{
}
interface ITestTypeB 
{
}

在这里,我不能通过让 TestBase 实现 ITestTypeA 或 ITestTypeB 来解决这个问题(就像另一个问题的解决方案一样),因为具体类 TestTypeA 应该同时实现 ITestTypeA 和 ITestBase,而 TestTypeB 应该实现 ITestTypeB 和 ITestBase。

我正在使用 protobuf-net v2.0.0.480

4

1 回答 1

1

我找到了这个可行的解决方案。不确定它是否被推荐,或者它是否会在运行时不知不觉中中断,但到目前为止它似乎适用于我的测试。

因为 protobuf-net 将接口视为序列化的具体类,所以它会遇到多重继承问题(这就是我对它的理解),所以我所做的只是从一个基类继承,并且不指定任何类与其接口之间的关系。

并创建一个可用于定义类层次结构的具体基类,如下所示。

[ProtoContract]
interface ITestBase 
{
}

[ProtoContract]
[ProtoInclude(1, typeof(TestTypeA))]
[ProtoInclude(2, typeof(TestTypeB))]
abstract class TestBase : ITestBase
{
}

[ProtoContract]
class TestTypeA : TestBase, ITestTypeA 
{
}

[ProtoContract]
interface ITestTypeA 
{
}

[ProtoContract]
class TestTypeB : TestBase, ITestTypeB 
{
}

[ProtoContract]
interface ITestTypeB 
{
}

实际上,[ProtoContract]接口前面的所有内容都可能无关紧要。我发现把它们一起拿出来似乎也很管用。

于 2012-06-18T07:24:46.453 回答