日期:2012-10-28  浏览次数:20379 次





走近VB.Net(二) 再谈函数调用
在VB6中如果你想调用一个对话框,首先你知道要使用vb内置的MsgBox函数,你甚至于使用API,大部分人乐于使用API。如下:
Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long。我想目前的文章很少介绍一些初级的东级,我正好水平有限,顺便谈一点初级知识,API 与普通的函数一样返回一个值给函数的名称,这个括号后的最后一个as long就是定义这个函数(messagebox)的数据类型为long 。所以每次调用的时候先有声明一个变量,dim xxx as long再如下:xxx=messagebox(这个括号里就填相应的参数,如第一个参数是ByVal hwnd As Long,这个是要你填一个long类型的句柄,可以先打一个0,打一个逗号,写入第二个string的字符数据,这个就是对话框的内容了……………….)。实际上在大部分时候并没有使用返回的值,只是作为一个调用的方法。 Lib"user32"表示使用user32的dll文件,alias"messageboxA"就是API函数了,messagebox只是一个代号,在linux中不是也有一个alias么?,就是一个别名了。
为什么VB.Net令大部分老的程序员感到愤怒呢?这也并不是完全的因循守旧,一个初入门的编程人员是无法想象一门完整的程序语言所需要经年累月积累的知识。然而现在这一切都改变了,就象上面提到的一些最基本的知识也不再基本。然而你为什么乐于使用API呢,你会回答,他更灵活更有挑战性,但是VB.Net
不是更加的富有这些么。或许微软会象传言的在BETA2中恢复一些VB6的东西,但我并不开心。或许有人说VB有很多的学JAVA(大概学微软的情况总是很少的,人人都喜欢在实际上嫌贫爱富,在口头上指点强者,讥嘲弱者得到满足)但是仅仅一个面向对象足以支撑net计划么,如果真的是这样,微软早就应该让位于其他软件商了。就是面向对象,也有一个是不是更强大的区别,而实际上他是更强大了。或许你不会去使用他,但是在若于年后,一些新的程序员(在今天或许尚没有接触过编程)将掌握一门如此强大的语言。。。。。。。。
我们看看如何的改变:
Shared Function <System.Runtime.InteropServices.DLLimport("user32.dll")> MessageBoxA(ByVal hwnd As Integer, ByVal text As String, ByVal lpcaption As String, ByVal wtype As Integer) As Integer
End Function
首先integer被作为32位数据替代了long(long是64位)
System是Net语言中的一个族,System.Runtime.InteropServices是system中的一个类。System.Runtime.InteropServices.DLLimpor是其中的一个方法。调用DLL的API
接口,这个的意思就是vb6的lib"user32", share是共享的意思,例如:
Public Class classA
Shared Function <System.Runtime.InteropServices.DLLimport("user32.dll")> MessageBoxA(ByVal h As Integer, ByVal m As String, ByVal c As String, ByVal type As Integer) As Integer
End Function
End Class
你可以这样调用 classA.MessageboxA 但是如果没有这个share 在class后打点就没有MessageboxA的成员出现了
现在你就象以前一样的使用他吧。

其实上面这个方法并不正确,我们仍旧要使用API声明,只是换了一各形式

如果你认为这就是VB.Net就错了,看看这个:
system.WinForms.MessageBox.Show("对话内容写在这里", "标题写在这里", messagebox.OK BitOr messagebox.IconAsterisk)

这就是面向对象,你已经完成了所有的任务。不需要任何的API声明。不需要写多余的代码。

messagebox.IconAsterisk=惊叹号图标
messagebox.IconError=错误图标
messagebox.IconExclamation=警告图标
messagebox.IconHand=错误图标
messagebox.IconInformation=提示图标

所经点NET就是打点到达,在族后面打点,在类后面打点,在对象后面打点。第二个问题就是类与类之间相互的关系,Net在网上处理人与人的关系,在程序语言中处理类与类的关系。倒底是加不加share,倒底是类后面打点,还是Dim成一个对象(把他当一个变量吧)再说,是等于class,还是New class.是dim xxx as class=new class 还是dim xxx as new class
就是这样VB.Net将更简单,不须要研究一些很难的东西。
写一个程序将会象写一篇文章那样自由,他也更难,他让你自已决定怎么做,学历经验或许不再是最重要的,他让你在智慧的空间驰骋。。。。。。。。。