我有以下函数定义:
Function Parameterless() as String
Run Code Online (Sandbox Code Playgroud)
它没有覆盖或重载.以下行将很乐意编译并运行:
Dim s as String = Parameterless(1)
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?
这里发生的事情确实很奇怪,而且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编译器决定你想要调用没有参数的方法,然后你想在字符串上使用索引器.
如果方法不返回字符串(或任何其他具有索引器的类型)但是例如整数,则会出现编译器错误.