我目前正在使用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 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
字段总是以一个空字符串结束(不是因为它最初开始时为空值)但我知道getName
方法返回正确的字符串为我在调试期间检查了它。如果我删除了不需要的参数,那么它按预期工作,Me._name获取返回的值。
为什么我能够在不存在错误列表的情况下传递参数而不会出现任何错误?我在同事的计算机上尝试了这个,他们得到了“太多的争论”错误。
答案 0 :(得分:6)
我们可以在VB.NET中调用带或不带括号的函数/ sub,所以这个
getName(bar)
实际上与此
相同getName()(bar)
这就是为什么没有错误。
此外,getName(bar)
不会将bar
作为参数传递给getName
函数,但它会返回(bar+1)th
返回的值的getName()
字符}。
例如,如果我们将getName
函数更改为此
Private Function getName() As String
Return "test"
End Function
然后getName(1)
将与getName()(1)
相同,它将返回"test"
的第二个字符,即"e"
。
答案 1 :(得分:2)
Chars
是String
类的默认属性。
Public NotInheritable Class [String]
<__DynamicallyInvokable> _
Public ReadOnly Default Property Chars(ByVal index As Integer) As Char
<MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical, __DynamicallyInvokable> _
Get
End Property
End Class
这就是你可以打电话的原因:
getName(bar)
这相当于
getName.Chars(bar)
现在,如果String
类没有任何默认属性,则会出现错误Expression is not an array or a method, and cannot have an argument list..
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
Public NotInheritable Class [String]
Public ReadOnly Property Chars(index As Integer) As Char
Get
End Get
End Property
End Class