这涉及三个独立的组件。
在AssemblyA
中,我有InterfaceA
。
InterfaceA
继承了名为AssemblyB
的{{1}}以及名为InterfaceB
的{{1}}的其他界面的界面。即。
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
Visual Studio完全识别方法DoStuff()
,但声称此处存在错误,特别是
程序集'AssemblyB,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'所需的引用包含类型
Dim myInstanceOfA = myRepo.GetInterfaceAInstance() myInstanceOfA.MainMethod() 'There is no error here. myInstanceOfA.DoStuff() 'I DO get an error here.
。在项目中添加一个
DoStuff()
对InterfaceB
中的任何内容都没有引用,且来自DoStuff
,为什么我需要引用AssemblyB
?另外,为什么AssemblyA
在没有引用的情况下工作,当它只是AssemblyB
并且与MainMethod
无关时?
答案 0 :(得分:1)
如果类在多个DLL中定义并且 或汇编 ,则编译器需要引用以避免歧义。当像这样使用inheritance
时,可能存在潜在的问题:使用继承中的基类以及类本身和循环引用来命名一些;编译器无法解决使用哪一个。
此时您唯一的选择是在项目引用中包含未引用的DLL或程序集的名称,以使编译器满意或重新考虑您的方法。