【发布时间】:2011-06-09 13:42:32
【问题描述】:
我只是想知道有 (Name) 属性,它表示 Form 类的名称。此属性在命名空间中用于唯一标识 Form 是其实例的类,并且在 Visual Basic 的情况下,用于访问表单的默认实例。
既然这个 Default Instance 是从哪里来的,为什么 C# 不能有一个与之等效的方法。
例如,为了在 C# 中显示表单,我们执行以下操作:
// Only method
Form1 frm = new Form1();
frm.Show();
但在 VB.Net 中我们有两种方法:
' First common method
Form1.Show()
' Second method
Dim frm As New Form1()
frm.Show()
我的问题来自第一种方法。这是什么
Form1,它是Form1的实例还是Form1类本身?现在正如我上面提到的,表单名称是 VB.Net 中的默认实例。但是我们也知道Form1是在Designer中定义的类,那么实例名称和类名称怎么可能相同呢? 如果Form1是一个类,则不存在名为 Show() 的 (Static\Shared) 方法。 那么这个方法是从哪里来的呢?它们在生成的IL中有什么区别?
最后,为什么 C# 不能有类似的功能?
【问题讨论】:
-
“它们在生成的 IL 中有什么不同”:下载并使用 .NET Reflector 自己找出来。它非常有用,而且免费。
-
我不想在 C# 中使用这个“功能”...这只是一个技巧,可以隐藏您需要创建一个类的实例才能使用它的事实。这真是一个可怕的主意!另外,它的文档记录很差,并且有意想不到和危险的副作用(例如,每个线程都有自己的“默认实例”形式)
-
@ThomasLevesque 我不想要那个功能.. 我只是想知道它是如何完成的以及是否可能.. :)