我有一个用c ++ / cli编写的抽象基类。该课程位于项目中。我有其他项目继承abtract基类。所以,结构如下。
基础项目:
public ref class Base abstract
{
// implementation
virtual CommonFunc();
};
public delegate void Foo();
派生项目A:
public ref class A : public Base
{
// implementation
};
派生项目B:
public ref class B : public Base
{
// implementation
};
等等。我可以在C#项目上调用A和B类。没问题。
但是,当我尝试使用Base的Foo委托时,会出现如下错误;
错误:'Foo'是'Foo'和'Foo'
之间的模糊引用
摆脱这个。我为C#项目中的A和B的引用定义了extern别名。所以,当我像AliasA.Foo一样使用时,没关系。但是,在两个A和B dll中存在两个Foo。那是个问题。
最后,当我尝试开发如下代码时,编译器不知道AliasBase.Base是A的基础。
AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();
错误:无法将类型'A'隐式转换为'Base'
我希望自己清楚明白。总结一下;我有三个dll。其中一个是base的dll,其他的是interherited class的dll。继承类的dll包含自己的基本实现。有没有办法摆脱基类的多个实现?
注意:是的,如果我将它们收集到项目中,就没有问题。但是,我被要求为所有衍生物品提供分离的dll。
提前致谢。
答案 0 :(得分:0)
正如Hans Passant建议发表评论时,我摆脱了头文件,只使用了引用,最后继承了。我不得不在C#端为基类设置一个别名,它与parant类有继承关系。所以,以下代码现在正在运作。
AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();