Почему я должен ссылаться на эту сборку? - PullRequest
0 голосов
/ 30 мая 2018

Это включает в себя три отдельных сборки.

В AssemblyA у меня InterfaceA.

InterfaceA наследует интерфейс от AssemblyB с именем InterfaceB, а также другой интерфейс от AssemblyA с именем InterfaceAWithMethod.то есть

Public Interface InterfaceA
    Inherits InterfaceAWithMethod, InterfaceB

    Function MainMethod() As Boolean
End Interface

Public Interface InterfaceAWithMethod
    Function DoStuff() As Boolean
End interface

, а в вышеприведенном AssemblyA имеется ссылка на AssemblyB.

Теперь у меня есть отдельная сборка, которая называется AssemblyC.AssemblyC имеет ссылку на AssemblyB и работает с экземпляром InterfaceA.Я использую репозиторий, чтобы получить экземпляр InterfaceA, а затем вызываю DoStuff() в моем экземпляре.

Dim myInstanceOfA = myRepo.GetInterfaceAInstance()
myInstanceOfA.MainMethod() 'There is no error here.
myInstanceOfA.DoStuff()    'I DO get an error here.

Visual Studio полностью распознает метод DoStuff(), но утверждает, что здесь есть ошибка, в частности

Ссылка, необходимая для сборки 'AssemblyB, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null ', содержащий тип InterfaceB.Добавьте один к своему проекту

DoStuff не имеет ссылок на что-либо в AssemblyB и относится к AssemblyA, почему я должен ссылаться на AssemblyB?Кроме того, почему MainMethod работает без ссылки, когда он также просто находится в AssemblyA и не имеет ничего общего с AssemblyB?

1 Ответ

0 голосов
/ 31 мая 2018

Компилятору требуется ссылка, чтобы избежать неоднозначности, если класс определен более чем в одной DLL и или сборке .При использовании inheritance подобным образом могут возникнуть потенциальные проблемы: использование базовых классов из наследования вместе с самим классом и циклическими ссылками, чтобы назвать несколько;компилятор не может решить, какой из них использовать.

На этом этапе вы можете только включить имя библиотеки DLL или сборки, на которую нет ссылок, в ссылки на ваш проект, чтобы компилятор был доволен или переосмыслил ваш подход.

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