Vb.net 不同模块中的同名方法会导致歧义

Vb.net 不同模块中的同名方法会导致歧义,vb.net,Vb.net,我有两个模块。每个都包含一个同名的子对象。见下文: Module moduleA Public Sub f(ByVal arg1 As myType) Console.WriteLine("module A") End Sub End Module Module moduleB Public Sub f(ByVal arg1 As myType, ByVal arg2 As Boolean) Console.WriteLine("modu

我有两个模块。每个都包含一个同名的子对象。见下文:

Module moduleA
    Public Sub f(ByVal arg1 As myType)
        Console.WriteLine("module A")
    End Sub
End Module

Module moduleB
    Public Sub f(ByVal arg1 As myType, ByVal arg2 As Boolean)
        Console.WriteLine("module B")
    End Sub
End Module
但是编译器抱怨moduleA和moduleB之间存在歧义

这怎么可能?我有完全不同的签名

但是,如果我将这两种方法放在同一个模块中,就不会有任何歧义

有人能告诉我为什么吗


非常感谢。

您需要完全限定方法调用以停止歧义。e、 g.
moduleA.f()

您需要完全限定方法调用以停止歧义。e、 g.
moduleA.f()

谢谢您的回复。但是为什么编译器不能仅仅通过签名来区分它们呢?某种重载?@smwikipedia:您收到的编译器警告是什么?@Ardman,“f”在模块“TestProject.moduleA”和“TestProject.moduleB”中的声明之间是不明确的。@smwikipedia:这就是为什么您必须为每个模块使用完全限定名的原因。谢谢您的回复。但是为什么编译器不能仅仅通过签名来区分它们呢?某种类型的重载?@smwikipedia:您收到的编译器警告是什么?@Ardman,'f'在模块“TestProject.moduleA”和“TestProject.moduleB”中的声明之间是不明确的。@smwikipedia:这就是为什么您必须为每个模块使用完全限定名的原因。为什么不将两个函数放在同一个模块中?我认为这两个模块的用途不同。那么,打moduleB.f(…)这样的电话有什么问题呢?除此之外,对于以后将看到您的代码的每个人(包括您自己)来说,它更容易理解。为什么不将这两个函数放在同一个模块中呢?我认为这两个模块的用途不同。那么,打moduleB.f(…)这样的电话有什么问题呢?此外,对于稍后将看到您的代码的每个人(包括您自己)来说,它更容易理解。