我有以下函数定义:VB.Net参数方法似乎是接受参数
Function Parameterless() as String
没有覆盖或它的过载。以下行将愉快地编译和运行:
Dim s as String = Parameterless(1)
这是怎么回事?
我有以下函数定义: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编译器决定你想调用没有参数的方法,然后你想在字符串上使用索引器。
如果该方法不会返回一个字符串(或任何其他具有索引器的类型),但是例如一个整数,则会出现编译器错误。
我试图根据你的代码
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
因此数字PARAM会有确定的字符的索引号
“默认”做这一招
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
奇迹V b ...:-) – Oscar
你确定你没有超载/遮蔽/覆盖部分类中的函数吗?我的Visual Studio告诉我“太多参数”。 – muffi
切换到更可靠和更严格的c# – Kokombads