我目前正在使用VB.NET,我遇到了一个问题.这是我的班级: Public class foo Private _bar As Integer Private _name As String Public Sub New(bar As Integer) Me._bar = bar Me._name = getName(bar) '//Passing in an argument where
Public class foo Private _bar As Integer Private _name As String Public Sub New(bar As Integer) Me._bar = bar Me._name = getName(bar) '//Passing in an argument where it is not needed End Sub Private Function getName() As String '//Get name from database using _bar as a lookup(it's essentially a primary key) '//Name is obtained successfully (checked when debugging) '//Return name End Function End Class
尽管传入一个没有参数的getName参数,我仍能运行此代码.但是,当我运行它时,Me._name字段总是以一个空字符串结束(不是因为它最初开始时为空值)但我知道getNamemethod返回正确的字符串,因为我在调试期间检查了它.如果我删除不需要的参数,那么它按预期工作,Me._name获取返回的值.
为什么我能够在不存在错误列表的情况下传递参数并且不会出现任何错误?我在同事的计算机上尝试了这个,他们得到了“太多的参数”错误.
我们可以在VB.NET中调用带或不带括号的函数/ sub,所以这个getName(bar)
实际上与此相同
getName()(bar)
这就是没有错误的原因.
此外,getName(bar)不会将bar作为getName函数的参数传递,但它将返回getName()返回的值的第(1栏)字符.
例如,如果我们将getName函数更改为this
Private Function getName() As String Return "test" End Function
然后getName(1)将与getName()(1)相同,它将返回“test”的第二个字符,即“e”.