2012-05-28 79 views
1

我認爲我的問題與此問題非常相似: Protobuf-net creating typemodel with interface and abstract baseclass 然而,這裏Marc給出的解決方案本質上減少了抽象類和接口的多重繼承,使其成爲單一的繼承設計。does protobuf-net支持多接口繼承

,我的問題是,我竟然需要多接口繼承這樣的:

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]。我發現把它們放在一起似乎也起作用。