【问题标题】:Inheritance across different (shared) projects & namespaces跨不同(共享)项目和命名空间的继承
【发布时间】:2018-12-29 23:17:41
【问题描述】:

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

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

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

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

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

    public class LowestLevel
    {
        public LowestLevel() { }
    }
}

在我的控制台应用程序Program 类中,我正在尝试创建HighestLevel 类的新实例,就像这样

LowestLevel myclass = new HighestLevel();

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

Cannot implicitly convert type ClassLib.HighestLevel to SharedProj.LowestLevel

谁能帮我理解为什么会这样,以及如何解决它?当这三个类都在同一个项目/命名空间中时,似乎不会出现这个问题,所以这可能是由将这些类拆分到各个项目中的方法引起的。

【问题讨论】:

  • 你真的需要使用共享项目吗?如今,这并不是真正推荐的做事方式。
  • 老实说,可能不是。我以前从未使用过,购买这背后的想法是共享项目的内容将在几个不同的项目之间共享。我想我可以简单地将它转换为类库并以类似的方式使用它 - 你认为这会更可取吗?
  • 你肯定想要类库项目。

标签: c# inheritance


【解决方案1】:

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

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

【讨论】:

  • 很好,感谢您的帮助。不知道我为什么选择共享项目,但它似乎在控制台应用程序中绝对没有用。
猜你喜欢
  • 1970-01-01
  • 2018-02-28
  • 2018-11-30
  • 1970-01-01
  • 2021-11-21
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
相关资源
最近更新 更多