ASP.NET中共用代码__教程 |
|
日期:2007-5-20 1:22:56 人气:76 [大 中 小] |
|
|
|
<script language=vb runat=server src="testClass.vb" /> <!-- #include virtual = "Shared.aspx" --> <!-- #include virtual = "Include.aspx" -->
Shared.aspx
<script language=vb runat=server id="modShared"> Public Shared shdMe As Object Public Shared shdString As String = ""
Public Class cTestObj Public Function Test(Byval commonObj As Object) Return commonObj.PublicFun(SharedFun("cTestObj")) End Function End Class
Public Class cTestShd Public Function Test() Return shdMe.PublicFun(SharedFun("cTestShd")) End Function End Class
Public Class cTestName Public Function Test() Dim webTest As New myTest Return webTest.PublicFun(SharedFun("cTestName")) End Function End Class
Public Function PublicFun(Byval strOutput As String) shdString &= "-[Public]" Return strOutput & "-[Public]" End Function
Public Shared Function SharedFun(Byval addString As String) shdString &= addString & "-[Shared]" Return addString & "-[Shared]" End Function </script> <% shdMe = Me Dim clsObj As New cTestObj Response.Write(clsObj.Test(Me) & "<br>") Dim clsShd As New cTestShd Response.Write(clsShd.Test() & "<br>") Dim clsName As New cTestName Response.Write(clsName.Test() & "<br>") Response.Write(TypeName(shdMe) & ", " & shdString & "<br>") %>
圖 3 以 Shared 為關鍵字宣告 當變數或函數以 Shared 為關鍵字宣告為共用後,變數及函數將變更為全域靜態,本例中宣告共用一個物件變數、一個字串變數及一個函數,由於變數為靜態變數,在所有工作階段 (Session) 連線未結束前可以疊加,因此字串變數宣告同時指定初值來避免疊加,但使用若需有類似變數需在網頁系統中共用時,不一定需要使用 Session 物件。共用函數則可於物件中直接使用,不需考慮命名空間的問題。
將主物件當作變數傳遞 傳遞物件可以透過引數或使用前述共用變數傳遞,在 cTestObj 類別中,將物件以引數方式傳遞到物件內使用,在 cTestShd 則透過共用變數傳遞到類別內。由於 PublicFun 函數為主物件下之公用函數,因此須透過主物件命名空間叫用。
宣告一個主物件引用 在cTestName 類別中,示範宣告一個主物件使用,這裡面會產生一個困擾,主物件類別的名稱為何?在本文中所有的程式碼都是被 Test.aspx 引入,對 ASP.NET 來說,實際上只是當作一個 aspx 檔來處理,所以在物件名設定上只能有一個,即是以 Test.aspx 設定為依據。在 Test.aspx 修改例中,在第一行加入 ClassName 指示詞的屬性,這邊指定的類別名稱即可在 cTestName 類別中使用,若是未指定類別名稱,則預設以該 Web Form 檔名將小數點 (dot) 替換為下減號 (under line) 後為預設物件名稱,如圖 2 中,Test_aspx 為物件名稱,圖3中則顯示 myTest 為物件名稱。當然在 cTestName 類別中可以宣告為 Test_aspx 物件,但通常可能因為共用的理由而不知道是哪個 Web Form 引用,在此情況下規定物件名會比較方便。
其他特性來說,在 Shared.aspx 及 Include.aspx 內分別存在程式碼轉譯區塊 (<% … %>),此特性亦有助於在不同分離的共用程式碼檔內,載入時執行指定程式碼或宣告特定的變數,例如在資料庫存取程式碼的規劃上,可將連線字串或常數分割在一個原始碼檔內,連線查詢的程式碼則分割在另一個原始碼檔內,不同的專案或不同的資料庫只要分別建立對應的連線字串宣告即可,仍可引用共用的程式碼存取資料庫。
此外,經由Shared宣告後的變數為靜態共用,在多使用者同時登入的環境下,亦可考慮透過 Shared 變數交換訊息,例如聊天室內的文字字串屬於不斷累加,即可使用 Shared 變數來達到效果。
最後要測試的是動態共用原始碼的限制。使用程式碼宣告區塊時,由於已無法在此區塊內再引用其他程式碼,故引用深度僅一層。使用 Include 指示詞時,由於下層的引入檔仍可繼續使用 Include 指示詞,所以並不知道最大可用深度。一般來說,深度測試屬於串聯測試,廣度測試屬於並聯測試,而通常深度限制比廣度限制來得嚴峻(遞迴深度),因此僅做最大深度測試。首先以程式產生輸出下面的程式碼到不同的檔案,n 由 1 ~ 10,000 進行深度測試,為了確認每個檔案均能被執行到,故在每個檔案內均使用程式碼轉譯區塊執行該檔的輸出函數,串接的結構圖如圖 4 所示。
|
|
出处:本站原创 作者:佚名 |
|
|