C#和C ++类继承混合

时间:2009-08-14 16:38:03

标签: c# inheritance c++-cli

我想要整理一堆有趣的程序集:

  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();
    
  4. 虽然程序集1可以是C ++ - CLI来保持简单,但我真的希望将程序集3保存在C#中。这在很大程度上是一个练习,看看是否可以在任何一个方向上完成继承,但我也有一个真实的情况,这个堆栈是有用的。

    我发现的第一个问题是C ++-CLI程序集无法编译,因为它不能将MyBase识别为类,即使我有对程序集1的引用以及看起来像正确名称空间的内容。

    如何编写语言可移植的类?

3 个答案:

答案 0 :(得分:4)

我认为你必须将MySpecific声明为这样的托管类:

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

有关详细信息,请参阅CLI / C ++文档。如果不进行修改,您将无法使用旧的C ++代码,但我认为您应该考虑的一切都是可能的。

答案 1 :(得分:3)

找到答案:

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

到目前为止,除了/ clr开关(c ++方面需要被管理)之外似乎还在起作用。

答案 2 :(得分:1)

这样可以正常工作,但如果您正在使用托管类型(即:从C#类继承),则需要使用C ++ / CLI语法。因此,在这种情况下,2.中的项应该看起来更像:

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

确保使用/ clr编译文件很好。

这是tutorial describing inheritance in C++/CLI