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

标签 vb.net

我有如下函数定义:

Function Parameterless() as String

它没有覆盖或重载。以下行将愉快地编译并运行:

Dim s as String = Parameterless(1)

发生了什么事?

最佳答案

这里发生的事情确实很奇怪,而且是 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 编译器决定您要调用不带参数的方法,然后您要在字符串上使用索引器。

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


关于VB.Net 无参数方法似乎正在接受参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46663189/

相关文章:

php - 使用VB.net解密AES256加密字符串

vb.net - log4net smtpappender 自定义电子邮件收件人

c# - 打开 PDF 文档并为其添加书签

vb.net - 确定小数点位数

c# - 如何使用 .NET 安装打印机?

vb.net - 拆分单词但保留特殊单词

vb.net - FileSystemWatcher 更新表单上的文本框

mysql - vb.net/mysql 在 TextBox 中显示多于 1 行

WPF 如何将 mahapps 图标动态对象绑定(bind)到按钮模板样式

c# - 通过代码隐藏将 CANONICAL 标签添加到我的页面以进行 SEO?