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

Nig*_*ins 3 vb.net

我有以下函数定义:

Function Parameterless() as String
Run Code Online (Sandbox Code Playgroud)

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

Dim s as String = Parameterless(1)
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

Tim*_*ter 8

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

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

Dim s As String = Parameterless
Run Code Online (Sandbox Code Playgroud)

你可以使用(因此推荐)

Dim s As String = Parameterless()
Run Code Online (Sandbox Code Playgroud)

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

Dim firstLetter As Char = Parameterless()(0)
Run Code Online (Sandbox Code Playgroud)

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

Dim firstLetter As Char = Parameterless(0)
Run Code Online (Sandbox Code Playgroud)

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

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