Наследование в разных (общих) проектах и ​​пространствах имен - PullRequest
0 голосов
/ 30 декабря 2018

Мое решение содержит три проекта:

  • Общий проект
    • Содержит класс LowestLevel и класс MidLevel, который наследуется от LowestLevel
  • Библиотека классов
    • Содержит ссылку на общий проект
    • Содержит класс HighestLevel, который наследуется от класса MidLevel, упомянутого выше
  • Консольное приложение
    • Содержит ссылку на библиотеку классов и общий проект

enter image description here

Я включил код для этих классов ниже - обратите внимание, что у каждого проекта есть свое собственное пространство имен

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

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

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

В моем классе консольных приложений Program я пытаюсь создать новый экземпляр HighestLevel class, вот так

LowestLevel myclass = new HighestLevel();

Однако это приводит к ошибке в Visual Studio, заявляющей

Cannot implicitly convert type ClassLib.HighestLevel to SharedProj.LowestLevel

Может кто-нибудь помочь мне понять, почему это так, икак я могу обойти это?Кажется, что эта проблема не возникает, когда все эти три класса находятся в одном проекте / пространстве имен, поэтому, возможно, это вызвано подходом разделения этих классов по различным проектам.

1 Ответ

0 голосов
/ 30 декабря 2018

Проблема в том, что проект, содержащий код LowestLevel и MidLevel, является общим проектом .Это важно, потому что в общей модели проекта совместное использование выполняется путем повторного использования файлов кода, а не фактических сборок.По сути, это то же самое, что копировать файлы кода и использовать их в обоих проектах.Это означает, что версия LowestLevel внутри SharedProj совершенно отличается от LowestLevel внутри ClassLib.

Общие проекты раньше были важны для таких вещей, как разработка Xamarin, когда вы хотели обмениваться кодами междуплатформы, но это было заменено созданием библиотек классов .NET Standard.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...