VB.NET函數寶典手把手教會你
經過長時間學習VB.NET函數,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
在程序設計過程中,隨著代碼量的不斷增加,會出現很多地方使用同樣代碼的情況。為了能夠減少同樣代碼的編寫,ASP.NET允許使用一些小的程序將重復的代碼只寫一次,其他需要使用這段代碼的地方調用這個小程序就可以了。
在ASP.NET中,實現這種小程序的方式有兩種:過程和函數。
模塊化的優點
模塊化是在程序設計發展到一定程度的時候誕生的程序設計方法。在早期的程序設計過程中,由于機器的硬件配置低,所以程序的運行速度和效率十分重要,因此早期的程序設計人員會大量使用各種技巧保證程序的快速運行,而這些技巧導致的最直接后果就是程序的結構混亂,很難閱讀。
隨著機器硬件的不斷更新,這些編程技巧所提高的程序運行速度已經微不足道,這時提高程序的可讀性就變得十分重要,于是就出現了模塊化程序設計方法。
模塊化程序設計方法的特點是:在編寫程序之前,把程序的功能分解成若干個小的任務,并把這些小任務看成是一個一個的模塊。當各個模塊編寫完成之后,就可以把這些模塊編譯成為一個大型的程序。由于每個模塊都有自己獨立的功能,所以可以把這些模塊分配給很多程序員來完成;而每個模塊的功能都是詳細定義的,所以可以建立完善的文檔,使得程序的可讀性大大提高。
VB.NET函數
VB.NET支持子過程和函數,它們都可以根據需要設置參數。它們之間惟一的區別是函數可以有返回值而子過程沒有。
子過程的定義方式為:
- Sub subname ([argument1[,…, argumentn]])
- [statements]
- End Sub
對于子過程的調用方式是直接調用過程名subname。如果有參數,就在后面按照次序將參數在括號中寫好。用一個子過程顯示對一個用戶的問候信息:
- <script language="vb" runat="server">
- Sub SayHello(strUserName as String)
- Response.Write ("Hello!" & strUserName & "<br>")
- End Sub
- </script>
- <%
- SayHello("Cindy")
- %>
在上面的例子中,有下面幾點需要說明:
(1) 在第1行~第5行使用<Script>標記加入程序代碼。
(2) 在第2行~第4行定義了一個SayHello子過程。這個過程帶有一個參數strUserName,并在第3行輸出。
(3) 在第7行調用了這個子過程。在調用的時候,傳入參數的值是“Cindy”。
VB.NET函數的定義方式為:
- Function functionname ([argument1[,…, argumentn]])
- [statements]
- [Return value]
- [statements]
- End Function
對于函數的調用方式是調用函數名functionname()。如果有參數,就按照次序寫在括號中。用一個函數計算兩個整數的和。
- <script language="vb" runat="server">
- Function Add(intData1 as Integer,intData2 as Integer) as Integer
- intData1intData1=intData1+intData2
- Return intData1
- End Function
- </script>
- <%
- Dim intTemp1,intTemp2 as Integer
- intTemp1=2
- intTemp2=3
- Response.Write(Add(intTemp1,intTemp2))
- Response.Write("<br>")
- Response.Write(intTemp1)
- %>
在上面的程序中,有下面幾點需要說明:
(1) 在第2行~第5行定義了一個函數Add。這個函數帶有兩個參數:intData1和intData2,并把一個整數作為返回值。
(2) 在第3行把參數intData1與intData2的和放到intData1中,并在第4行把intData1作為結果返回。
(3) 在第11行調用了這個函數,并把結果顯示出來。
在上面的子過程和函數的講解過程中,可以看出都可以采用帶參數的方式來增加子過程和函數的靈活性。需要說明的是,參數的傳遞有兩種方式:通過值傳遞參數和通過引用傳遞參數。
在調用子過程和函數的時候,如果沒有明確地指出,所有的參數都是通過值進行傳遞的。所謂通過值進行傳遞,就是把參數的值復制到參數中。例如例2.12中第11行的Add(intTemp1,intTemp2),就是通過值進行傳遞的好例子。在真正執行第2行~第5行定義的Add函數時,是把intTemp1的值2復制給了intData1,把intTemp2的值3復制給了intData2。在第3行把intData1和intData2的和賦值給intData1的時候,intData1的值變成了5,但是這個時候,intTemp1的值仍然是2,不是5(通過第13行的執行可以看出來),這就是通過值傳遞參數。這時,intData1和intTemp1是兩個不同的變量,在內存中占用不同的存儲空間。
在函數和子過程中,使用關鍵字ByVal來顯式表示通過值傳遞參數。也就是說,如果要用顯式的方式進行定義,第2行的函數定義可以寫成:
- Function Add(ByVal intData1 as Integer, ByVal intData2 as Integer) as Integer
默認的情況是采用通過值傳遞參數。那么什么是通過引用傳遞參數呢?請先看下面的例子。用一個函數計算兩個整數的和。
- <script language="vb" runat="server">
- Function Add(ByRef intData1 as Integer,ByRef intData2 as Integer) as Integer
- intData1intData1=intData1+intData2
- Return intData1
- End Function
- </script>
- <%
- Dim intTemp1,intTemp2 as Integer
- intTemp1=2
- intTemp2=3
- Response.Write(Add(intTemp1,intTemp2))
- Response.Write("<br>")
- Response.Write(intTemp1)
- %>
在這里使用了ByRef關鍵字表示這時的參數是通過引用進行傳遞的。執行這個程序就會發現,在程序執行完之后,不但intData1的值變成了5,同時intTemp1的值也變成了5。
通過引用傳遞參數的方法是把參數的地址傳遞進去。在第11行進行傳遞的時候,不是把intTemp1的值復制給intData1,把intTemp2的值復制給intData2,而是把intTemp1的地址給了intData1的地址,把intTemp2的地址給了intData2的地址。在傳遞成功之后,intData1就是intTemp1,intData2就是intTemp2。所以在第3行intData1的值發生變化時,intTemp1的值也同時發生了變化。
變量的作用域
在進行變量聲明時,變量聲明的位置決定了這個變量的作用范圍。在一個過程或VB.NET函數外聲明的變量是全局變量,對本程序內部所有的過程和函數都起作用;而在一個過程或函數內部聲明的變量是局部變量,只對本過程或函數起作用。
下面通過一個例子說明全局變量和局部變量的區別。全局變量和局部變量的使用。
- <script language="vb" runat="server">
- Dim strGlobal as String="global"
- Sub SayHello
- Dim strTemp as String="hello!"
- Response.Write (strTemp & "<br>")
- Response.Write (strGlobal & "<br>")
- if strGlobal<>"" then
- Dim strTemp1 as String="hello cindy!"
- Response.Write (strTemp1 & "<br>")
- end if
- 'Response.Write (strTemp1 & "<br>")
- End Sub
- </script>
- <%
- SayHello
- %>
上面的例子中,有下面幾點需要說明:
(1) 第2行聲明的變量strGlobal定義在所有的VB.NET函數或者過程之外,所以是一個全局變量。由于在定義這個變量的時候就為這個變量賦值為“global”,所以,在后面的程序中,第一次使用這個變量時這個變量的值就是“global”。
(2) 第3行~第12行定義了一個子過程SayHello。在這個過程中,首先在第4行定義了一個變量strTemp,由于這個變量是定義在子過程中的,所以這個變量是一個局部變量。在第5行顯示這個變量的值的時候,會顯示一個“hello!”字符串。
(3) 第6行要顯示strGlobal的值,由于這是一個全局變量,所以會顯示第1行賦值的“global”。
(4) 第7行~第10行定義了一個If/Endif代碼塊,在這個代碼塊中,定義了一個塊級局部變量strTemp1(第8行)。由于這個變量是定義在代碼塊中的,所以只在這個代碼塊中起作用。所以在第9行要顯示它的值的時候,會顯示“hello cindy!”。而如果取消第11行的注釋,系統將會通告strTemp1變量沒有定義。
通過上面的例子可以看出,在編寫程序的時候,要時刻注意變量的作用域的問題。因為在不同模塊中修改全局變量會導致模塊之間相互影響,違反了進行模塊化程序設計的初衷。所以要設計好的程序,就應該盡量減少全局變量的使用。
【編輯推薦】