跨不同(共享)项目和名称空间的继承

时间:2018-12-29 23:17:41

标签: c# inheritance

我的解决方案包含三个项目:

  • 共享项目
    • 包含一个LowestLevel类和一个继承自MidLevel的{​​{1}}类
  • 类库
    • 包含对共享项目的引用
    • 包含一个LowestLevel类,该类继承自上述HighestLevel
  • 控制台应用程序
    • 包含对类库和共享项目的引用

enter image description here

我在下面包含了这些类的代码-请注意,每个项目都有自己的命名空间

MidLevel

在控制台应用程序namespace ClassLib { public class HighestLevel : MidLevel { public HighestLevel() { } } } namespace SharedProj { public class MidLevel : LowestLevel { public MidLevel() { } } public class LowestLevel { public LowestLevel() { } } } 类中,我正在尝试创建Program类的新实例,

HighestLevel

但是这在Visual Studio中给出了错误,说明

LowestLevel myclass = new HighestLevel();

任何人都可以帮助我了解这是为什么以及如何解决该问题吗?当这三个类都在同一个项目/名称空间中时,似乎不会出现此问题,因此可能是由于将这些类拆分到各个项目中而导致的。

1 个答案:

答案 0 :(得分:5)

问题是包含LowestLevelMidLevel代码的项目是共享项目。这很重要,因为在共享项目模型中,共享是通过重用代码文件而不是实际的程序集来完成的。这与复制代码文件并在两个项目中使用它们基本相同。这意味着LowestLevelSharedProj的版本与LowestLevelClassLib的版本完全不同。

当您想跨平台共享代码时,共享项目曾经对Xamarin开发之类的事情很重要,但是现在已经由创建.NET Standard类库所取代。