C # Visual Studio нужна ссылка на базовый класс DLL - PullRequest
1 голос
/ 19 марта 2011

Почему я получаю эту проблему?

Фон: myClass наследуется от класса ABC, который наследуется от BaseClass. BaseClass - это пользовательский класс, созданный в другом пространстве имен и содержащийся в другой сборке DLL.

Проблема: VisualStudio хочет, чтобы я добавил ссылку на библиотеку BaseClass DLL, иначе она не будет компилироваться myClass.

  • Почему компилятор не использует метаданные?
  • Что, если я купил DLL (возможно, без исходного кода), а поставщик использует сотни классов для наследования, зачем мне нужно добавлять (и знать) все эти ссылки?

Спасибо

Ответы [ 4 ]

3 голосов
/ 19 марта 2011

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

Ваш сценарий продавца просто нереален. Никто не проектирует иерархии классов, которые имеют глубину в сотню классов, не говоря уже о хранении каждой из них в отдельной сборке. Это в лучшем случае в шесть или семь. С одной базовой сборкой, иногда с двумя. Еще глубже, и никто не может понять, как это работает.

2 голосов
/ 19 марта 2011

Если на BaseClass нет ссылки, как ваша программа узнает об этом и его определении?Откуда предполагается получать метаданные, если на них нет ссылок?

Это все равно что задавать вопрос SO на стороне веб-сервера, но не говорить никому, какой язык / платформу вы используете - здесь нет системы отсчета.

2 голосов
/ 19 марта 2011

Относительно вашего vendor сценария - вам не придется ссылаться на все библиотеки из библиотеки поставщика, если эта библиотека не предоставляет ничего из других библиотек, и все эти библиотеки используются только для внутреннего использования.

Но если библиотека, например, возвращает класс из другой библиотеки (или ее наследника), тогда, конечно, вам придется ссылаться на оба.Просто для того, чтобы получить всю информацию об этих выставленных классах.

1 голос
/ 19 марта 2011

Давайте ответим на ваши вопросы ...

Чтобы скомпилировать код для MyClass, ему нужно знать, что сделал Class. Чтобы узнать, что сделал Class, нужно посмотреть, что сделал BaseClass - это как цепочка.

Вы должны включить в свой проект все, против чего вы строите. Это можно сделать, либо фактически имея источник чего-либо в вашем проекте, либо включив ссылку на проект / двоичный файл, где определено поведение.

Метаданные не содержат каких-либо подробностей о фактической логике в классе.

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