有人能给我解释一下吗?
在Visual Studio 2010中,创建一个VB.net Windows窗体应用程序。添加两个窗体:Form1和Form2。在Form1 Load事件中键入Form2.Close()。现在,如果我们查看方法定义,Close()不是静态(共享)方法。那么这怎么可能编译或在运行时工作呢。
此外,在C#中做同样的事情,Form2.Close()无法编译。
发生了什么?为什么在VB.net中可以这样做,执行该行代码时实际上正在发生什么?
My.Forms.Form2.Close();
原因是如果您只按名称引用表单,VB将创建一个自动实例,如果未被捕获,在运行时可能会导致意外后果。
我没有找到任何设置来防止发生这种情况。
但是,您可以通过将默认构造函数的范围从Public更改为Friend或删除默认构造函数并添加需要参数的构造函数,在编译时“破坏”此行为。 这些更改中的任何一个都将禁用自动窗体引用。
Form2
只是一个类类型时,您无法调用Form2.Close();
。但是,在VB.NET中,它会在后台创建一个同名的属性,因此实际上您是在一个Form2
实例上调用Close
。如果您手动创建这样的属性,您也可以在C#中执行相同的操作。它看起来像静态方法调用,但实际上并不是静态方法。Close
。它看起来像是一个静态调用。 - vcsjones
MS Access
开发人员负责VB.NET
以使其更吸引VB6
/VBA
用户群时所发生的事情。灾难随之而来... - John Alexiou