我正在使用升级向导将 VB6 升级到 VB.NET 项目。我知道这会给我带来很大的悲伤,但我正在努力使旧的应用程序可用。如果我有时间,我会重写它,但目前我正在完成暑期实习,并且希望能有所作为。
向导正在做的一件事是重命名随机变量,但我找不到任何理由。例如:
Structure ctrObj
Dim Name As String
Dim Index As Integer
Dim Top As Integer
'UPGRADE_NOTE: Left was upgraded to Left_Renamed. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
Dim Left_Renamed As Integer
Dim Height As Integer
Dim width As Integer
Dim ScaleHeight As Integer
Dim ScaleWidth As Integer
End Structure
对于我的生活,我不明白为什么这会向左改变。据我所知,它不是一个保留名称,我在范围内找不到其他名为 left 的变量,并且重命名它不会产生编译器错误。
'UPGRADE_NOTE: Left was upgraded to Left_Renamed. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
Dim Left_Renamed As Integer
更改为
Dim Left As Integer
不会给出编译器错误。
它对整个项目中看似随机的变量执行此操作。有人知道为什么它不喜欢我的一些变量名称吗?
最佳答案
我最好的猜测是,它重命名为 Left 以避免与 VB 函数 Left 混淆。这是命名空间中模块的方法,默认导入到每个 VB.Net 项目中。因此它是全局可用的。
例如:编译得很好
Dim x = Left("here", 1)
可能担心如果不带参数使用该函数可能会出现歧义错误。例如
Public Structure S1
Public Left As Integer
Public Sub Method1()
Dim x = Left
End Sub
End Structure
但是,由于多种原因,这不可能发生。主要是 VB 的名称绑定(bind)规则将优先使用成员变量 Left 而不是模块函数 Left。
所以,不完全确定原因,但这可能是为了避免潜在的歧义而过于谨慎。
关于vb.net - VB6 到 VB.NET Visual Studio 升级向导讨厌我的一些变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1275061/