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

Kli*_*ker 1 c# inheritance

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

  • 共享项目
    • 包含一个LowestLevel类,以及一个MidLevel继承自的类LowestLevel
  • 班级图书馆
    • 包含对共享项目的引用
    • 包含一个HighestLevel继承自上述MidLevel类的类
  • 控制台应用
    • 包含对类库和共享项目的引用

在此输入图像描述

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

namespace ClassLib
{
    public class HighestLevel : MidLevel
    {
        public HighestLevel() { }
    }
}

namespace SharedProj
{
    public class MidLevel : LowestLevel
    {
        public MidLevel() { }
    }

    public class LowestLevel
    {
        public LowestLevel() { }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的Console Applications Program类中,我正在尝试创建类的新实例HighestLevel,就像这样

LowestLevel myclass = new HighestLevel();
Run Code Online (Sandbox Code Playgroud)

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

Cannot implicitly convert type ClassLib.HighestLevel to SharedProj.LowestLevel

任何人都可以帮助我理解为什么会这样,以及我如何解决它?当这三个类都在同一个项目/命名空间内时,似乎没有出现这个问题,所以也许它是由在各个项目中拆分这些类的方法引起的.

Dav*_*idG 5

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

当你想跨平台共享代码时,共享项目曾经对Xamarin开发这样的事情很重要,但现在已经被创建.NET Standard类库取代了.