首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

VB老手.NET新手之不解:VB.NET 中的类和对象到底是咋回事

2012-09-24 
VB老手.NET新手之不解:VB.NET 中的类和对象到底是怎么回事?以前一直用 VB6 的,最近想学下 VB.NET,但是试着

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
[解决办法]

探讨
那么这两套模式是否有配置的地方,即配置一下让项目使用VB6兼容模式,再该一下配置项目便启用.NET模式。还是说,没有配置,在编程中就是混合使用的?
另外,由于历史遗留,感觉 VB.NET 不是很纯正的 .NET 开发。如果要学习.NET平台上的 Windows 程序开发,是不是该直接学C#呢?这样的话,以前的VB6基础都用不上了,可惜中。。。

热点排行