【问题标题】:How does the implicitly created Form work?隐式创建的 Form 是如何工作的?
【发布时间】:2014-07-28 01:10:12
【问题描述】:

如果我创建一个新的 Windows 窗体项目并添加第二个窗体 (Form2),我可以通过引用类名来显示隐式创建的窗体:

Form2.Show()

如果我查找Form.Show 过程的定义,它没有被列为Form 类的Shared 成员。我怎么能在 Form2 类名上调用 Show()?

【问题讨论】:

  • 你确定你没有实例吗?
  • @DanielA.White 如果我将鼠标悬停在我调用它的名称上,它会显示“Class Form2”,但是如果我使用 New() 创建的实例的名称,它会显示“Dim AForm作为 WindowsApplication1.Form2"。因此,除非 IDE 不准确,否则它不是实例。

标签: vb.net winforms visual-studio-2010


【解决方案1】:

我试过了,然后用 ILSpy 反编译了可执行文件。

它似乎正在默默地将Form2.Show() 改写为MyProject.Forms.Form2.Show()

MyProject.Forms 是一个生成的类,它封装了项目中每个表单的惰性实例化单例实例。

这似乎是 IDE 而不是编译器的功能,因为在 LINQPad 中,我得到“对非共享成员的引用需要对象引用”。

【讨论】:

  • 除了延迟初始化的单例实例之外,还必须有更多内容。当人们从非 UI 线程尝试像 Form1.Invoke(...) 这样的事情时,我希望它也是线程静态的,从而导致各种问题。
  • 是的,还有更多内容,那就是 30 秒概览。无论如何,看起来您对线程静态的看法是正确的。另请参阅相关问题以进行更多讨论:stackoverflow.com/questions/4698538/…
猜你喜欢
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 2011-09-28
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多