能够将参数传递给没有参数的函数

时间:2014-02-07 11:37:23

标签: vb.net function parameters compiler-errors

我目前正在使用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获取返回的值。

为什么我能够在不存在错误列表的情况下传递参数而不会出现任何错误?我在同事的计算机上尝试了这个,他们得到了“太多的争论”错误。

2 个答案:

答案 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)

CharsString类的默认属性。

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