将vb6应用程序移植到VS2008 vb.net-使编译器标志统一化形式';s私有变量作为错误
我可以让编译器给我一个错误(赋值前使用变量),错误如下: 但不包括:将vb6应用程序移植到VS2008 vb.net-使编译器标志统一化形式';s私有变量作为错误,vb.net,compiler-construction,Vb.net,Compiler Construction,我可以让编译器给我一个错误(赋值前使用变量),错误如下: 但不包括: Friend Class frmReceiving ... Private mobjOrder As Order ... private sub Testing() Dim ord2 As Order ord2 = mobjOrder end sub 如何将其标记为错误 谢谢。是的 使用/warnaserror编译器选项 您的第二个示例不是错误mobjOrder将被初始化为Nothing。然后将Noth
Friend Class frmReceiving
...
Private mobjOrder As Order
...
private sub Testing()
Dim ord2 As Order
ord2 = mobjOrder
end sub
如何将其标记为错误
谢谢。是的
使用/warnaserror编译器选项
您的第二个示例不是错误
mobjOrder
将被初始化为Nothing
。然后将Nothing
分配给ord2
。这是完全合理的做法。这两个例子有什么区别。为什么mobjOrder被初始化为零,但在第一个例子中不是ord?在第一个例子中,它是一个局部变量。在第二个例子中,它是一个实例变量。这两个赋值没有区别,这两个对象是“无”的,只是编译器无法知道私有类成员对象在赋值语句之前是否已在其他地方初始化(尽管我希望它能够分析使用它的所有位置并确定是否已初始化),而在这个方法中,它知道局部变量是单位化的。当然,同样的论点也适用于第一个例子ord
将被初始化为Nothing
&将Nothing
分配给ord2
是合法的。只是编译器检测到它并警告您,因为它可能是一个错误。正如bmutch所说,区别在于创建一个静态分析器来帮助您处理第二种情况要困难得多。@MarkJ:我不知道VB有多详细,但在C#中,ord
不会初始化为null
。这只是一个编译器错误。
Friend Class frmReceiving
...
Private mobjOrder As Order
...
private sub Testing()
Dim ord2 As Order
ord2 = mobjOrder
end sub