表单不能通过共享调用的默认实例引用自身

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解决错误.从微软的角度来看,似乎必须共享所有重载,如果至少有一个重载.或者您得到此默认实例混淆.为什么?

为了澄清,我并不想在这里使用默认实例,只是做一个共享调用.

如果有人遇到同样的情况,请告知.

Han*_*ant 4

创建与 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)