我想要整理一堆有趣的程序集:
通用程序集(C#或C ++ - CLI)
public class MyBase
{
public void MethodA()
{ ... }
private void MethodB()
{ ... }
protected virtual MethodC()
{ ... }
}
测试代码程序集(所有C ++ - CLI)
public class MySpecific : public MyBase{
protected: override MethodC();
};
测试模拟器(C#)
MySpecific obj = new MySpecific();
obj.MethodC();
虽然程序集1可以是C ++ - CLI来保持简单,但我真的希望将程序集3保存在C#中。这在很大程度上是一个练习,看看是否可以在任何一个方向上完成继承,但我也有一个真实的情况,这个堆栈是有用的。
我发现的第一个问题是C ++-CLI程序集无法编译,因为它不能将MyBase识别为类,即使我有对程序集1的引用以及看起来像正确名称空间的内容。
如何编写语言可移植的类?
答案 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编译文件很好。