VB老手.NET新手之不解:VB.NET 中的类和对象到底是怎么回事?
以前一直用 VB6 的,最近想学下 VB.NET,但是试着写了几个简单的窗体程序,虽然能运行,但却让我很不解。
比如
Public Class Form1
Private Sub Form1_Load()(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox(String.Format("{0:n3}", 79.83579))
End Sub
End Class
这里窗体的 Load 事件为何会执行呢?这个过程明明是在一个类(Form1)中啊,并没有任何地方把这个类实例化,根本就没有对象,类中的代码怎么会执行的呢?
而且,语句 MsgBox(String.Format("{0:n3}", 79.83579)) 中, “String”也是一个类,并没有实例化它,怎么就能调用并执行它的 Format 方法呢?
[解决办法]
在VB6里面,Form也是一个类,并且你不需要new,它也能运行,这是微软的伪装,这种伪装对完全不懂和完全搞懂的人来说都不是问题,问题是不懂却意识到这是个问题的那些人。这是好事。
结论就是,VB.NET隐藏了初始化一个窗体的代码。
至于你说的MessageBox.Show(),其实这是一个静态方法(Shared Method),在VB.NET中也可以实现,最简单的办法就是定义模块。
[解决办法]
好问题!
我查看了Application.Designer.vb和Form1.Designer.vb也没有找到啥线索。
不过String的Format方法我个人觉得应该一个Shared方法,所以可以直接引用。
[解决办法]
vb6的理念是错误的,定义了一个类,却可以当作实例来用,虽然初学者使用理解上比较方便。
vb.net的早期版本规范了这个操作,需要先new出来一个实例,才能用
Dim myForm1 As New Form1()
myForm1.Show()
不过从vb6转过来的人不习惯,而且代码兼容性也有问题,在vb.net 2005的时候又加入了默认实例的办法,可以直接用类似vb6的方法来使用。
他定义在My命名空间的My.Forms集合属性下,完整写法是
My.Forms.Form1.Show()
http://msdn.microsoft.com/zh-cn/library/87y2hdsf(v=vs.100).aspx
[解决办法]