VB.Net无参数方法似乎是接受参数

时间:2017-10-10 09:26:15

标签: vb.net

我有以下功能定义:

Function Parameterless() as String

没有覆盖或重载。以下行将很乐意编译并运行:

Dim s as String = Parameterless(1)

发生了什么事?

3 个答案:

答案 0 :(得分:8)

这里发生的事情确实很奇怪,而且VB.NET很奇怪。

使用()调用方法和索引器(与C#相反,后者使用[])。由于向下兼容性,这些括号不是强制性的。您可以调用任何不带任何参数的方法。所以你可以使用:

Dim s As String = Parameterless

你可以使用(推荐这个原因)

Dim s As String = Parameterless()

但是为什么即使没有过载也可以使用Parameterless(0)?因为该方法返回一个具有索引器的String。因此,如果您想要返回的字符串的第一个字符,您可以使用(推荐):

Dim firstLetter As Char = Parameterless()(0)

或(不推荐,但你的情况)

Dim firstLetter As Char = Parameterless(0)

这是有效的,因为没有重载,VB.NET编译器决定你想要在没有参数的情况下调用方法,然后你想在字符串上使用索引器。

如果方法不返回字符串(或任何其他具有索引器的类型)但是例如整数,则会出现编译器错误。

答案 1 :(得分:1)

我尝试根据您的代码复制它

 Private Function Parameterless() As String
        Return "abcd"
    End Function

我添加了一个按钮

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim per As String = Parameterless(1)

        TextBox1.Text = per
    End Sub

文本框中显示的输出: B'/ P>

所以数字参数将决定要显示的索引字符数

答案 2 :(得分:1)

"默认"做这个技巧

Public Class User
    Default ReadOnly Property Number(i As Integer) As String
        Get
            If i = 1 Then Return "Mark"
            Return "Bob"
        End Get
    End Property
End Class
Private Function TestFunction () As User
    Return New User
End Function

因此输出

    TestFunction(1) 'Mark
    TestFunction(2) 'Bob