假设我有两个这样的重载:
Public Function MyTest(i As Integer) As SomeType
classField_i = i
Return MyTest
End Function
Public Function MyTest As SomeType
Return New SomeType()
End Function
我在调用第一个重载时所期望的是SomeType的一个实例,但是,我得到的是Nothing。原因似乎是,编译器选择评估尚未设置的内部声明的变量MyTest
,而不是调用niladic重载。
所以这表明我应该声明第一个这样的函数:
Public Function MyTest(i As Integer) As SomeType
classField_i = i
Return MyTest()
End Function
但在VB.Net中,不需要函数调用的括号!所以这似乎是一个奇怪的异常现象,编译器以意想不到的方式解决了歧义。
这种行为究竟是什么原因?
*编辑I *
在我的原始帖子中,我指定了Integer作为函数的返回值,正如Plutonix指出的那样,永远不会返回Nothing。我修复它以返回SomeType的对象,因为它在实际代码中
答案 0 :(得分:4)
在内部函数中,VB使用函数名作为返回值的变量。
而不是
Public Function MyTest As Integer
Return 3
End Function
你可以写
Public Function MyTest() As Integer
MyTest = 3
End Function
在您的函数中,您实际上是返回该变量而不是调用函数。试试这个,你可能会理解发生了什么。
Public Function MyTest(ByVal i As Integer) As Integer
MyTest = 4
Return MyTest
End Function
不要冒任何机会,并在调用子或函数时始终使用()。
如果你真的想省略(),那就用我吧。由于局部变量在类具有相同名称时优先于类中的任何声明。
Public Function MyTest(i As Integer) As Integer
classField_i = i
Return Me.MyTest
End Function