2012-05-28 2 views
1

Я думаю, что мой вопрос очень похож на этот вопрос: Protobuf-net creating typemodel with interface and abstract baseclass однако решение дается Marc здесь, по существу, уменьшает множественное наследование абстрактного класса и интерфейс вниз в единый дизайн наследования ,делает наследование Protobuf внутрисетевой поддержки нескольких интерфейсов

проблема для меня, я на самом деле требуется множественное наследование интерфейса, как это:

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-сеть v2.0.0.480

+0

«нет», будет моим простым ответом –

ответ

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] перед интерфейсах не может даже значения. Я нахожу, что с ними все вместе получается.

Смежные вопросы