2011-06-06 68 views
3

在C++/CLI,我想類似於以下一個類層次結構:C++/CLI:從一個CLR類繼承,多個C ​​++類

Foo 
    FooA : Foo, ClrClassA 
    FooB : Foo, ClrClassB 

有可能是FooA共享一個(非CLR)基類,同時也從單獨的CLR類繼承?如果不是,FooA和FooB共享通用代碼的最佳方式是什麼?

回答

5

一般來說,composition is often better than inheritance,因爲它往往會導致聯繫不太緊密的設計。

如果您混合託管代碼和非託管代碼,根據我的經驗,託管代碼中包含非託管代碼通常更容易,反之亦然。

多重繼承不支持託管代碼,並有an article on Wikipedia這就解釋了爲什麼:

託管C++和使用類和基礎類的對象仍然是在Visual C++盛行等。 Managed C++對此的唯一重大改變是不支持多重繼承的功能。這是因爲CLR的限制。 CLR的垃圾收集器不能繼承多個類下的管理類

這是很難給出一個很好的答案爲如何最好到類/功能結合起來不知道爲什麼要的類合併...

+2

要明確,託管類型不支持多繼承,也不支持從本機類型派生。 – ildjarn 2011-06-06 21:30:08

+0

FooA將是一個WinForms控件並從Control繼承,FooB將是一個WPF控件並將從FrameworkElement繼承。這個想法是爲共享相當數量的代碼的WinForms和WPF創建一個控件。 – anthony 2011-06-06 21:30:48

+0

@ildjarn - 非常真實 – 2011-06-06 21:33:44

3

你不能從一個引用類型和本地類型繼承一個類。

+0

甚至更​​嚴格:'class'不能繼承一個'ref class'。一個'ref class'不能繼承一個'class'。後者是每個'ref class'繼承(可能間接)從'System.Object'繼承的結果。 – 2011-06-06 22:32:46