Neo*_*isk 6 vb.net visual-studio-2010
在全新的WinForms .NET 4.0应用程序中,使用默认设置考虑以下代码:
Public Class Form1
Private Sub AAA()
Form1.AAA(Nothing) 'cannot refer to itself through its default instance; use 'Me' instead.
End Sub
Private Shared Sub AAA(str As String)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
{FORM_CLASS_NAME}无法通过其默认实例引用自身; 用'我'代替.
我也在同一行得到这个警告:
通过实例访问共享成员,常量成员,枚举成员或嵌套类型; 不会评估合格表达式.
假设默认实例在这里,它最终在一个无限循环 - VS建议Me.AAA()改为Form1.AAA(),然后返回.AAA()适用于两者.
转换Private Sub AAA()为Shared解决错误.从微软的角度来看,似乎必须共享所有重载,如果至少有一个重载.或者您得到此默认实例混淆.为什么?
为了澄清,我并不想在这里使用默认实例,只是做一个共享调用.
如果有人遇到同样的情况,请告知.
创建与 Form 类的类型同名的变量别名无疑是 VB.NET 中最灾难性的问题。但有必要为 VB6 开发人员提供迁移到 VB.NET 的战斗机会。
解决方法是停止尝试明确要调用的方法。这编译得很好并且很明确,至少在您的代码片段中:
Private Sub AAA()
AAA(Nothing) '' fine
End Sub
Run Code Online (Sandbox Code Playgroud)
如果这真的非常痛苦,那么只需交换这两种方法就可以消除歧义:
Private Shared Sub AAA(str As String)
End Sub
Private Sub AAA()
Form1.AAA(Nothing) '' fine
End Sub
Run Code Online (Sandbox Code Playgroud)