2010-05-20 3 views
2

У меня есть 2 модуля. Каждый из них содержит Sub с тем же именем. Смотрите ниже:Те же методы в разных модулях вызывают неоднозначность

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.

Как это могло быть? У меня совершенно разные подписи.

Однако, если я помещу 2 метода в один и тот же модуль, нет никакой двусмысленности вообще.

Может ли кто-нибудь сказать мне, почему?

Большое спасибо.

+0

Почему вы не помещаете обе функции в один и тот же модуль? Я думаю, потому что оба модуля предназначены для разных целей. Таким образом, возникает проблема сделать вызов типа moduleB.f (...)? Кроме того, его легче понять для всех (включая вас самих), которые увидят ваш код позже. –

ответ

0

Вам нужно будет полностью квалифицировать вызовы методов, чтобы остановить неоднозначность. например moduleA.f().

+0

Спасибо за ваш ответ. Но почему компилятор не может отличить их только подписи? Какой-то перегруз? – smwikipedia

+0

@smwikipedia: что такое предупреждение о компиляторе, которое вы получаете? –

+0

@Ardman, 'f' неоднозначно между объявлениями в модулях TestProject.moduleA 'и' TestProject.moduleB '. – smwikipedia

Смежные вопросы