轉貼自JoyASP:.NET框架(一)
2024-07-10 12:59:56
供稿:網友
 
一、基本概念 
.net框架(framework)是一個開發、部署和運行.net應用的環境,包括了asp.net、公共語言運行時環境(clr)以及.net 框架類。關于asp.net和clr的介紹已經有很多,相對而言,關于.net框架類的介紹卻比較少見。 
.net框架類也即system類,它提供了大量我們在構造asp.net應用(以及非asp.net應用時)可以利用的核心功能。system類可在所有.net語言中使用,所以我們可以把system類看成是一種.net的windows api。與windows api不同的是,system類提供了類似于com的高級接口,相當容易使用。 
正如所有其他.net類,system類也以程序集(assembly)的形式存在。.net中的程序集類似于com dll或者exe文件——它是保存類代碼的執行文件。例如,math類(包括其屬性和方法定義)位于mscorlib.dll程序集。.net有兩種類型的程序集——私有程序集,共享程序集。私有程序集是屬于單個應用的程序集,通常位于應用的bin目錄;與此相反,共享程序集可以用于多個應用,而且它應該由程序集的創建者裝入到全局程序集緩沖區(相當于.net中的系統注冊表)。.net system類都屬于共享程序集。 
如果你曾經用windows api編程,你肯定知道使用windows api的困難在于:我們很難識別和找出要調用的是哪一個函數。在windows api dll之內不存在對函數進行組織的方法,看起來就像所有的api調用都被隨意堆砌到了一個龐大的dll之中。幸運的是,.net類按照邏輯關系組織成了稱為名稱空間(namespace)的層次結構。例如,math類是system名稱空間的一個成員。名稱空間在層次結構中可以嵌套多層。例如,adoconnection類是system.data.ado類的一個成員。 
1.1 引用名稱空間中的成員 
要使用名稱空間中的類,我們必須順著名稱空間的層次結構找到具體要使用的類,即通過“.”分隔的名字顯式地引用類。例如,要創建一個adoconnection對象,我們必須使用類似下面的代碼(本文的所有例子都用visual basic編寫,但不管是哪一種.net語言,基本概念仍舊是一樣的): 
dim cnx as system.data.sql.sqlconnection
cnx = new system.data.sql.sqlconnection( _
"server=(local);uid=sa;pwd=;database=pubs")
除了上面的方法,我們還可以用import指令簡化對類的引用。例如,下面的代碼告訴asp.net把system.data.sql名稱空間導入到當前頁面: 
<%@ import namespace="system.data.sql" %>
導入名稱空間之后,我們就可以直接引用類的名字,省略所有類名字前面的名稱空間說明。現在創建adoconnection對象的代碼為: 
dim cnx as sqlconnection
cnx = new sqlconnection("server=(local);uid=sa;pwd=;database=pubs")
可見,使用import指令可以減少大量的輸入。 
許多名稱空間已經由asp.net自動導入,我們不必再為了簡化名稱引用而去導入這些名稱空間。這些名稱空間如下: 
system 
system.collections 
system.text 
system.text.regularexpressions 
system.web 
system.web.caching 
system.web.sessionstate 
system.web.security 
system.web.ui 
system.web.ui.webcontrols 
system.web.ui.htmlcontrols 
應該注意的是,導入一個層次較高的名稱空間并不意味著同時導入了層次結構中位于它下面的名稱空間。也就是說,下面的import指令只導入system.data名稱空間中的類,但沒有從system.data.ado、system.data.sql以及其他system.data下面的名稱空間導入類: 
<%@ import namespace="system.data" %>
1.2 類的成員 
類包含各種成員——屬性(property),方法(method),域(field),事件(event),以及構造類的構造器(constructor)。屬性描述了類的特征,比如system.array類有一個length屬性。方法是類能夠執行的動作,例如我們可以調用array類的sort方法排序數組。域類似于屬性,對于任何具體的應用,我們可以象對待屬性一樣對待域,例如math類的pi屬性返回π的值。事件代表著我們可以對它作出反應的動作,例如adoconnection類有一個名為infomessage的事件,這個事件在數據庫提供者發送警告或者提示性信息的時候觸發。最后,構造器是一種特殊的方法,它在創建新對象的時候被調用。例如,當我們創建新的sqlconnection對象時,我們就調用該類的構造函數并把一個數據庫連接串傳遞給它。 
類的成員可以是以下兩種類型之一:靜態成員,實例成員。靜態成員(也稱為共享成員)是所有類的實例共享的成員,不依賴于類的具體實例。要使用靜態成員,我們只需象使用對象一樣通過類的名字引用成員的名字即可。例如,system.math類的pow方法是一個靜態成員,用來計算數值的乘方。下面的代碼計算5的3次方: 
answer = math.pow(5, 3)
與靜態成員相反,實例成員依賴于具體的實例對象。它意味著,在使用類的實例成員之前,我們必須先創建對象實例。例如,我們可以用system.random類的實例成員nextdouble方法返回一個隨機數字。下面的代碼先創建一個system.random類型的對象,然后把dblrandom變量的值設置為一個隨機數字: 
dim dblrandom as double
dim rnd as random = new random
dblrandom = rnd.nextdouble
1.3 vb.net函數與system類的成員 
vb.net語言的歷史是一個不斷變化的漫長過程。雖然microsoft在vb.net中取消了許多原來vb的功能,但vb.net語言中的許多功能仍舊與system類的功能重復。如果可以選擇的話,使用system類幾乎總是比使用vb.net功能更好。使用system類不僅使得代碼更容易移植到其他語言,而且使得代碼更符合未來vb.net版本的要求,因為在未來的vb.net語言中,microsoft可能繼續取消某些早期vb語言的功能。 
二、數學計算 
system.math類包含大量可用于數學計算的域和方法,它的所有成員都是靜態的。system.math類的pow方法能夠計算數值的乘方。例如,我們可以用math.pi域和pow方法計算圓的面積(下例中dblradius是圓的半徑),math.pi返回圓周率π: 
dblarea = math.pi * math.pow(dblradius, 2)
用sqrt方法可以計算數值的平方根。例如,下面的代碼計算64的平方根: 
answer = math.sqrt(64)
用abs方法可以返回數值的絕對值。例如,下面的代碼返回-7.8的絕對值,answer的值將是7.8: 
answer = math.abs(-7.8)
sign方法可以返回數值的符號。如果數值是負數,sign返回-1;如果是正數,sign返回1;如果是0,sign返回0。round方法把數值舍入成為最接近的整數。例如,下面的代碼舍入3.4677789這個值,answer的值將是3: 
answer = math.round(3.4677789)
如果你想要round一個恰好處于兩個整數值之間的值,比如3.5,則round總是返回最接近該數值的偶數。也就是說,math.round(3.5)返回值是4,而math.round(6.5)的返回值是6。floor方法用來截短一個實數,它的返回值是小于指定數值的最大整數值。例如,下面的代碼截短數值5.9,answer的值將是5: 
answer = math.floor(5.9)
注意floor方法操作負數的結果可能與你所想象的不同。例如,floor(-5.9)的返回值應該是-6。 
除了上面介紹的這些方法之外,math類還包含許多進行三角計算和對數計算的方法。 
三、生成隨機數字 
system.random類用來生成隨機數字。然而,與vb的rnd函數不同,system.random既能夠返回小數隨機數,也能夠返回整數隨機數;system.random類根據系統日期和時間自動生成隨機數種子初始化隨機數生成器。 
用system.random的nextdouble方法可以返回一個0到1之間的double類型隨機數;用next方法可以返回兩個整數值之間的隨機整數。nextdouble和next都是實例方法,所以在使用這些方法之前你必須先創建一個system.random類型的對象。下面是一個完整的asp.net頁面,它顯示了如何運用這些方法生成20個隨機數字,其中10個隨機數字處于0到1之間,另外10個處于1到50之間: 
<%@ page language="vb" explicit="true"%>
<head>
<title>random實例</title>
<script language="vb" runat="server">
sub page_load(src as object, e as eventargs)
    ' 等價于vb6 rnd函數的.net框架類
    ' 隨機數生成方法
    dim rnd as system.random = new system.random
    dim i as integer
        
    lbloutput.text &= "<table border=""1"">"
    lbloutput.text &= "<tr><th>rnd.nextdouble</th>" & _
     <th>next(1,50)</th></tr>"
    for i = 1 to 10
        lbloutput.text &= "<tr>"
        lbloutput.text &= "<td>" & rnd.nextdouble & "</td>"
        lbloutput.text &= "<td>" & rnd.next(1,50) & "</td>"
        lbloutput.text &= "</tr>"
    next
    lbloutput.text &= "</table>"
end sub 
</script>
</head>
<body>
<asp:label id="lbloutput" runat="server" />
</body>
</html>
下圖顯示了這個頁面的運行結果(當然,如果你運行這個頁面,得到的很可能是一組不同的隨機數字)。 
前面我們討論了.net framework中程序集、名稱空間和類如何結合成一個整體,以及如何利用內建的system類進行數學計算和生成隨機數字。本文的第二部分將接著討論其他幾個有用的類,包括array類、string類、datetime類等。