clr项目dll之间的继承
Inheritance between clr project dlls
我有一个用c++/cli编写的抽象基础class。此 class 位于项目中。我还有其他项目继承了抽象基础 class。因此,结构如下所示。
基础项目:
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 classes。没问题。
但是,当我尝试使用 Base 的 Foo 委托时,出现如下错误;
Error : 'Foo' is an ambiguous reference between 'Foo' and 'Foo'
摆脱这个。我在 C# 项目中为 A 和 B 的引用定义了外部别名。所以,当我使用 like AliasA.Foo 时,没问题。但是,在两个 A 和 B dll 中存在两个 Foo。这是个问题。
最后,当我尝试开发如下代码时,编译器不知道 AliasBase.Base 是 A 的基数。
AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();
Error : Cannot implicitly convert type 'A' to 'Base'
我希望我说清楚了。总结;我有三个 dll。其中一个是base的dll,其他的是inteherited class的dll。继承的 class 的 dll 包含它们自己的基本实现。有没有办法摆脱基数的多个实现?class?
注意:是的,如果我将它们收集到一个项目中,就不会有问题。但是,我被要求为所有派生项目提供单独的 dll。
提前致谢。
正如 Hans Passant 在评论中建议的那样,我摆脱了头文件并仅使用引用,最后继承工作。我只需要在 C# 端为 base class 设置一个别名,它与 parant classes 有继承关系。因此,以下代码现在可以正常工作了。
AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();
我有一个用c++/cli编写的抽象基础class。此 class 位于项目中。我还有其他项目继承了抽象基础 class。因此,结构如下所示。
基础项目:
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 classes。没问题。
但是,当我尝试使用 Base 的 Foo 委托时,出现如下错误;
Error : 'Foo' is an ambiguous reference between 'Foo' and 'Foo'
摆脱这个。我在 C# 项目中为 A 和 B 的引用定义了外部别名。所以,当我使用 like AliasA.Foo 时,没问题。但是,在两个 A 和 B dll 中存在两个 Foo。这是个问题。
最后,当我尝试开发如下代码时,编译器不知道 AliasBase.Base 是 A 的基数。
AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();
Error : Cannot implicitly convert type 'A' to 'Base'
我希望我说清楚了。总结;我有三个 dll。其中一个是base的dll,其他的是inteherited class的dll。继承的 class 的 dll 包含它们自己的基本实现。有没有办法摆脱基数的多个实现?class?
注意:是的,如果我将它们收集到一个项目中,就不会有问题。但是,我被要求为所有派生项目提供单独的 dll。
提前致谢。
正如 Hans Passant 在评论中建议的那样,我摆脱了头文件并仅使用引用,最后继承工作。我只需要在 C# 端为 base class 设置一个别名,它与 parant classes 有继承关系。因此,以下代码现在可以正常工作了。
AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();