Reputation: 400
I have an interesting stack of assemblies I want to put together:
Common Assembly (C# or C++-CLI)
public class MyBase
{
public void MethodA()
{ ... }
private void MethodB()
{ ... }
protected virtual MethodC()
{ ... }
}
Test Code Assemblies (all C++-CLI)
public class MySpecific : public MyBase{
protected: override MethodC();
};
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?
Upvotes: 5
Views: 3207
Reputation: 564383
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.
Upvotes: 1
Reputation: 400
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.
Upvotes: 3
Reputation: 15702
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.
Upvotes: 4