正確理解VB.NET函數(shù)調(diào)用
VB.NET編程語(yǔ)言中的函數(shù)應(yīng)用是一個(gè)非常復(fù)雜的步驟,很多內(nèi)容都需要我們?cè)趯?shí)踐中慢慢積累經(jīng)驗(yàn),去對(duì)此進(jìn)行詳細(xì)解讀。在這里我們先來(lái)談?wù)動(dòng)嘘P(guān)VB.NET函數(shù)調(diào)用的一些方法,希望對(duì)大家有所幫助。#t#
在VB6中如果你想調(diào)用一個(gè)對(duì)話框,首先你知道要使用vb內(nèi)置的MsgBox函數(shù),你甚至于使用API,大部分人樂(lè)于使用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
所以每次進(jìn)行VB.NET函數(shù)調(diào)用的時(shí)候先有聲明一個(gè)變量,dim xxx as long再如下:xxx=messagebox(這個(gè)括號(hào)里就填相應(yīng)的參數(shù),如第一個(gè)參數(shù)是ByVal hwnd As Long,這個(gè)是要你填一個(gè)long類(lèi)型的句柄,可以先打一個(gè)0,打一個(gè)逗號(hào),寫(xiě)入第二個(gè)string的字符數(shù)據(jù),這個(gè)就是對(duì)話框的內(nèi)容了……………….)。
實(shí)際上在大部分時(shí)候并沒(méi)有使用返回的值,只是作為一個(gè)調(diào)用的方法。 Lib"user32"表示使用user32的dll文件,alias"messageboxA"就是API函數(shù)了,messagebox只是一個(gè)代號(hào),在linux中不是也有一個(gè)alias么?,就是一個(gè)別名了。
為什么VB.NET令大部分老的程序員感到憤怒呢?這也并不是完全的因循守舊,一個(gè)初入門(mén)的編程人員是無(wú)法想象一門(mén)完整的程序語(yǔ)言所需要經(jīng)年累月積累的知識(shí)。然而現(xiàn)在這一切都改變了,就象上面提到的一些最基本的知識(shí)也不再基本。然而你為什么樂(lè)于使用API呢,你會(huì)回答,他更靈活更有挑戰(zhàn)性,但是VB.NET 不是更加的富有這些么。
或許微軟會(huì)象傳言的在BETA2中恢復(fù)一些VB6的東西,但我并不開(kāi)心。或許有人說(shuō)VB有很多的學(xué)JAVA(大概學(xué)微軟的情況總是很少的,人人都喜歡在實(shí)際上嫌貧愛(ài)富,在口頭上指點(diǎn)強(qiáng)者,譏嘲弱者得到滿足)但是僅僅一個(gè)面向?qū)ο笞阋灾蝞et計(jì)劃么,如果真的是這樣,微軟早就應(yīng)該讓位于其他軟件商了。就是面向?qū)ο?,也有一個(gè)是不是更強(qiáng)大的區(qū)別,而實(shí)際上他是更強(qiáng)大了。
或許你不會(huì)去使用他,但是在若于年后,一些新的程序員(在今天或許尚沒(méi)有接觸過(guò)編程)將掌握一門(mén)如此強(qiáng)大的語(yǔ)言。。。。。。。。
我們看看如何的改變:
- 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位數(shù)據(jù)替代了long(long是64位)
System是Net語(yǔ)言中的一個(gè)族,System.Runtime.InteropServices是system中的一個(gè)類(lèi)。System.Runtime.InteropServices.DLLimpor是其中的一個(gè)方法。調(diào)用DLL的API
接口,這個(gè)的意思就是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
你可以這樣調(diào)用 classA.MessageboxA 但是如果沒(méi)有這個(gè)share 在class后打點(diǎn)就沒(méi)有MessageboxA的成員出現(xiàn)了 ,現(xiàn)在你就象以前一樣的使用他吧。
其實(shí)上面這個(gè)VB.NET函數(shù)調(diào)用方法并不正確,我們?nèi)耘f要使用API聲明,只是換了一各形式
如果你認(rèn)為這就是VB.NET就錯(cuò)了,看看這個(gè):
system.WinForms.MessageBox.Show("對(duì)話內(nèi)容寫(xiě)在這里", "標(biāo)題寫(xiě)在這里", messagebox.OK BitOr messagebox.IconAsterisk)
這就是面向?qū)ο?,你已?jīng)完成了所有的任務(wù)。不需要任何的API聲明。不需要寫(xiě)多余的代碼。
- messagebox.IconAsterisk=驚嘆號(hào)圖標(biāo)
- messagebox.IconError=錯(cuò)誤圖標(biāo)
- messagebox.IconExclamation=警告圖標(biāo)
- messagebox.IconHand=錯(cuò)誤圖標(biāo)
- messagebox.IconInformation=提示圖標(biāo)
所經(jīng)點(diǎn)NET就是打點(diǎn)到達(dá),在族后面打點(diǎn),在類(lèi)后面打點(diǎn),在對(duì)象后面打點(diǎn)。第二個(gè)問(wèn)題就是類(lèi)與類(lèi)之間相互的關(guān)系,Net在網(wǎng)上處理人與人的關(guān)系,在程序語(yǔ)言中處理類(lèi)與類(lèi)的關(guān)系。倒底是加不加share,倒底是類(lèi)后面打點(diǎn),還是Dim成一個(gè)對(duì)象(把他當(dāng)一個(gè)變量吧)再說(shuō),是等于class,還是New class.是dim xxx as class=new class 還是dim xxx as new class
就是這樣VB.NET函數(shù)調(diào)用將更簡(jiǎn)單,不須要研究一些很難的東西。