簡體   English   中英

C#和C ++類繼承混合

[英]C# and C++ class inheritance intermingling

我有一堆有趣的組件我想要組合在一起:

  1. 通用程序集(C#或C ++ - CLI)

     public class MyBase { public void MethodA() { ... } private void MethodB() { ... } protected virtual MethodC() { ... } } 
  2. 測試代碼程序集(所有C ++ - CLI)

     public class MySpecific : public MyBase{ protected: override MethodC(); }; 
  3. 測試模擬器(C#)

     MySpecific obj = new MySpecific(); obj.MethodC(); 

雖然程序集1可以是C ++ - CLI來保持簡單,但我真的希望將程序集3保存在C#中。 這在很大程度上是一個練習,看看是否可以在任何一個方向上完成繼承,但我也有一個真實的情況,這個堆棧是有用的。

我發現的第一個問題是C ++ - CLI程序集不能編譯,因為它不能將MyBase識別為類,即使我有一個對程序集1的引用,看起來像是正確的名稱空間。

如何編寫語言可移植的類?

我認為您必須將MySpecific聲明為托管類,如下所示:

public ref class MySpecific : public MyBase { ... }

有關詳細信息,請參閱CLI / C ++文檔。 如果不進行修改,您將無法使用舊的C ++代碼,但我認為您應該考慮的一切都是可能的。

找到答案:

`#using "..\common\bin\debug\common.dll"`

到目前為止,除了/ clr開關(c ++方面需要被管理)之外,似乎還在起作用。

這樣可以正常工作,但如果您正在使用托管類型(即:繼承自C#類),則需要使用C ++ / CLI語法。 因此,在這種情況下,2.中的項應該看起來更像:

public ref class MySpecific : public MyBase { ... }

確保使用/ clr編譯文件很好。

這是一個描述C ++ / CLI繼承教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM