clr项目dll之间的继承

时间:2017-12-06 21:24:07

标签: .net inheritance dll c++-cli clr

我有一个用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。

提前致谢。

1 个答案:

答案 0 :(得分:0)

正如Hans Passant建议发表评论时,我摆脱了头文件,只使用了引用,最后继承了。我不得不在C#端为基类设置一个别名,它与parant类有继承关系。所以,以下代码现在正在运作。

AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();