为什么我需要参考这个程序集?

时间:2018-05-30 19:50:37

标签: vb.net inheritance

这涉及三个独立的组件。

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无关时?

1 个答案:

答案 0 :(得分:1)

如果类在多个DLL中定义并且 或汇编 ,则编译器需要引用以避免歧义。当像这样使用inheritance时,可能存在潜在的问题:使用继承中的基类以及类本身和循环引用来命名一些;编译器无法解决使用哪一个。

此时您唯一的选择是在项目引用中包含未引用的DLL或程序集的名称,以使编译器满意或重新考虑您的方法。