Jon*_*ski 5 c# vb.net winforms
谁可以给我解释一下这个?
在Visual Studio 2010中,创建一个VB.net Windows窗体应用程序.添加2个表单:Form1和Form2.在Form1 Load事件中键入Form2.Close().现在,如果我们查看方法定义,Close()不是静态(共享)方法.那么如何在运行时编译或工作呢?
此外,在C#和Form2.Close()中做同样的事情; 不编译.
这是怎么回事?为什么在VB.net中可以实现这一点以及在执行该行代码时实际发生了什么?
您已经发现了一个名为"默认实例"的VB.NET-ism.
编译器实际上是这样发出的:
My.Forms.Form2.Close();
Run Code Online (Sandbox Code Playgroud)
这里有一个很好的特写:
默认实例是VB应用程序框架为您创建和管理的该类型的对象.
...
如果使用默认实例,则无需显式调用构造函数.您只需通过My.Forms对象直接访问默认实例
原因是如果您只是按名称引用它们,VB会创建表单的自动实例,如果没有捕获它,可能会在运行时导致意外后果.
我发现没有任何设置可以防止这种情况发生.
但是,您可以在编译时通过将默认构造函数的范围从Public更改为Friend,或者通过删除默认构造函数并添加需要参数的构造函数来"中断"此行为.这些或这些更改将禁用自动表单引用.
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |