C# and C++ class inheritance intermingling

可紊 提交于 2020-01-03 11:50:28

问题


I have an interesting stack of assemblies I want to put together:

  1. Common Assembly (C# or C++-CLI)

    public class MyBase
    {
    public void MethodA()
    { ... }
    private void MethodB()
    { ... }
    protected virtual MethodC()
    { ... }
    }
    
  2. Test Code Assemblies (all C++-CLI)

    public class MySpecific : public MyBase{
    protected: override MethodC();
    };
    
  3. Test Simulator (C#)

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

While assembly 1 could be C++-CLI to keep things simpler, I'd really like to keep assembly 3 in C#. This is largely an exercise to see if inheritance could be done in either direction, but I also have a real-world case where this stack is useful.

The first problem I find is that the C++-CLI assembly does not compile because it doesn't recognize MyBase as a class, even though I have a reference to assembly 1 and what looks like the proper namespace.

How do I write classes that are language-portable?


回答1:


I think you have to declare MySpecific as a managed class like this:

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

See the CLI/C++ documentation for details. You will not be able to use old C++ code without modifications, but I think everything you have in mind should be possible.




回答2:


Found the answer:

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

That, in addition to the /clr switch (the c++ side needs to be mananged) seems to be working, so far.




回答3:


This will work fine, but you'll need to use the C++/CLI syntax, if you're working with managed types (ie: inheriting from a C# class). So, in this case, the item in 2. should look more like:

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

Make sure that file is compiled with /clr are well.

Here is a tutorial describing inheritance in C++/CLI.



来源:https://stackoverflow.com/questions/1278893/c-sharp-and-c-class-inheritance-intermingling

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!