在C++/CLI,我想類似於以下一個類層次結構:C++/CLI:從一個CLR類繼承,多個C ++類
Foo
FooA : Foo, ClrClassA
FooB : Foo, ClrClassB
有可能是FooA共享一個(非CLR)基類,同時也從單獨的CLR類繼承?如果不是,FooA和FooB共享通用代碼的最佳方式是什麼?
在C++/CLI,我想類似於以下一個類層次結構:C++/CLI:從一個CLR類繼承,多個C ++類
Foo
FooA : Foo, ClrClassA
FooB : Foo, ClrClassB
有可能是FooA共享一個(非CLR)基類,同時也從單獨的CLR類繼承?如果不是,FooA和FooB共享通用代碼的最佳方式是什麼?
一般來說,composition is often better than inheritance,因爲它往往會導致聯繫不太緊密的設計。
如果您混合託管代碼和非託管代碼,根據我的經驗,託管代碼中包含非託管代碼通常更容易,反之亦然。
多重繼承不支持託管代碼,並有an article on Wikipedia這就解釋了爲什麼:
託管C++和使用類和基礎類的對象仍然是在Visual C++盛行等。 Managed C++對此的唯一重大改變是不支持多重繼承的功能。這是因爲CLR的限制。 CLR的垃圾收集器不能繼承多個類下的管理類
這是很難給出一個很好的答案爲如何最好到類/功能結合起來不知道爲什麼要的類合併...
你不能從一個引用類型和本地類型繼承一個類。
甚至更嚴格:'class'不能繼承一個'ref class'。一個'ref class'不能繼承一個'class'。後者是每個'ref class'繼承(可能間接)從'System.Object'繼承的結果。 – 2011-06-06 22:32:46
要明確,託管類型不支持多繼承,也不支持從本機類型派生。 – ildjarn 2011-06-06 21:30:08
FooA將是一個WinForms控件並從Control繼承,FooB將是一個WPF控件並將從FrameworkElement繼承。這個想法是爲共享相當數量的代碼的WinForms和WPF創建一個控件。 – anthony 2011-06-06 21:30:48
@ildjarn - 非常真實 – 2011-06-06 21:33:44