一基本概念
NET框架(Framework)是一個開發部署和運行NET應用的環境包括了ASPNET公共語言運行時環境(CLR)以及NET 框架類關於ASPNET和CLR的介紹已經有很多相對而言關於NET框架類的介紹卻比較少見
NET框架類也即System類它提供了大量我們在構造ASPNET應用(以及非ASPNET應用時)可以利用的核心功能System類可在所有NET語言中使用所以我們可以把System類看成是一種NET的Windows API與Windows API不同的是System類提供了類似於COM的高級接口相當容易使用
正如所有其他NET類System類也以程序集(Assembly)的形式存在NET中的程序集類似於COM DLL或者EXE文件——它是保存類代碼的執行文件例如Math類(包括其屬性和方法定義)位於mscorlibdll程序集NET有兩種類型的程序集——私有程序集共享程序集私有程序集是屬於單個應用的程序集通常位於應用的bin目錄與此相反共享程序集可以用於多個應用而且它應該由程序集的創建者裝入到全局程序集緩沖區(相當於NET中的系統注冊表)NET System類都屬於共享程序集
如果你曾經用Windows API編程你肯定知道使用Windows API的困難在於我們很難識別和找出要調用的是哪一個函數在Windows API DLL之內不存在對函數進行組織的方法看起來就像所有的API調用都被隨意堆砌到了一個龐大的DLL之中幸運的是NET類按照邏輯關系組織成了稱為名稱空間(Namespace)的層次結構例如Math類是System名稱空間的一個成員名稱空間在層次結構中可以嵌套多層例如ADOConnection類是SystemDataADO類的一個成員
引用名稱空間中的成員
要使用名稱空間中的類我們必須順著名稱空間的層次結構找到具體要使用的類即通過分隔的名字顯式地引用類例如要創建一個ADOConnection對象我們必須使用類似下面的代碼(本文的所有例子都用Visual Basic編寫但不管是哪一種NET語言基本概念仍舊是一樣的)
Dim cnx As SystemDataSQLSQLConnection
cnx = New SystemDataSQLSQLConnection( _
server=(local);uid=sa;pwd=;database=pubs)
除了上面的方法
我們還可以用Import指令簡化對類的引用
例如
下面的代碼告訴ASP
NET把System
Data
SQL名稱空間導入到當前頁面
<%@ Import Namespace=SystemDataSQL %>
導入名稱空間之後
我們就可以直接引用類的名字
省略所有類名字前面的名稱空間說明
現在創建ADOConnection對象的代碼為
Dim cnx As SQLConnection
cnx = New SQLConnection(server=(local);uid=sa;pwd=;database=pubs)
可見
使用Import指令可以減少大量的輸入
許多名稱空間已經由ASPNET自動導入我們不必再為了簡化名稱引用而去導入這些名稱空間這些名稱空間如下
System
SystemCollections
SystemText
SystemTextRegularExpressions
SystemWeb
SystemWebCaching
SystemWebSessionState
SystemWebSecurity
SystemWebUI
SystemWebUIWebControls
SystemWebUIHtmlControls
應該注意的是
導入一個層次較高的名稱空間並不意味著同時導入了層次結構中位於它下面的名稱空間
也就是說
下面的Import指令只導入System
Data名稱空間中的類
但沒有從System
Data
ADO
System
Data
SQL以及其他System
Data下面的名稱空間導入類
<%@ Import Namespace=SystemData %>
類的成員
類包含各種成員——屬性(Property)方法(Method)域(Field)事件(Event)以及構造類的構造器(Constructor)屬性描述了類的特征比如SystemArray類有一個Length屬性方法是類能夠執行的動作例如我們可以調用Array類的Sort方法排序數組域類似於屬性對於任何具體的應用我們可以象對待屬性一樣對待域例如Math類的PI屬性返回π的值事件代表著我們可以對它作出反應的動作例如ADOConnection類有一個名為InfoMessage的事件這個事件在數據庫提供者發送警告或者提示性信息的時候觸發最後構造器是一種特殊的方法它在創建新對象的時候被調用例如當我們創建新的SQLConnection對象時我們就調用該類的構造函數並把一個數據庫連接串傳遞給它
三處理日期/時間數據
SystemDateTime類提供了許多處理DateTime值的方法要創建一個DateTime值我們只需聲明一個DateTime類型的變量並通過#分隔符賦予它一個DateTime常量如下所示
Dim SeattleQuake As DateTime = #// :#
System
DateTime類一個很大的優點是
我們能夠通過它的屬性非常方便地分析日期/時間值
這些DateTime類屬性的含義非常明顯
它們是
Year
Month
Day
DayOfWeek
DayOfYear
Hour
Minute
Second
Millisecond
Ticks
等
每個Ticks等於
個納秒(毫微秒)
例如
在下面的代碼中
answer的值將等於
answer = SeattleQuakeHour
我們還可以用Date和TimeOfDay屬性獲得DateTime數據的日期或者時間部分TimeOfDay屬性返回的是一個TimeSpan值它表示已流逝的按ticks計的時間可以想象利用TimeSpan值的屬性我們可以分析出TimeSpan時間的各個部分請參見NET Framework SDK文檔了解詳細信息
SystemDateTime類還提供了幾個增加(或者減少)DateTime值某一部分的方法它們是AddYearsAddMonthsAddDaysAddHoursAddMinutesAddSecondsAddMillisecondsAddTicks
例如下面的代碼對指定的日期(BDay)進行加年減年操作
Dim BDay As DateTime = #// :#
Dim NextBDay As DateTime
Dim LastBDay As DateTime
NextBDay = TheDateAddYears()
LastBDay = TheDateAddYears()
類的成員可以是以下兩種類型之一靜態成員實例成員靜態成員(也稱為共享成員)是所有類的實例共享的成員不依賴於類的具體實例要使用靜態成員我們只需象使用對象一樣通過類的名字引用成員的名字即可例如SystemMath類的Pow方法是一個靜態成員用來計算數值的乘方下面的代碼計算的次方
answer = MathPow( )
與靜態成員相反
實例成員依賴於具體的實例對象
它意味著
在使用類的實例成員之前
我們必須先創建對象實例
例如
我們可以用System
Random類的實例成員NextDouble方法返回一個隨機數字
下面的代碼先創建一個System
Random類型的對象
然後把dblRandom變量的值設置為一個隨機數字
Dim dblRandom As Double
Dim rnd As Random = New Random
dblRandom = rndNextDouble
VBNET函數與System類的成員
VBNET語言的歷史是一個不斷變化的漫長過程雖然Microsoft在VBNET中取消了許多原來VB的功能但VBNET語言中的許多功能仍舊與System類的功能重復如果可以選擇的話使用System類幾乎總是比使用VBNET功能更好使用System類不僅使得代碼更容易移植到其他語言而且使得代碼更符合未來VBNET版本的要求因為在未來的VBNET語言中Microsoft可能繼續取消某些早期VB語言的功能
二數學計算
SystemMath類包含大量可用於數學計算的域和方法它的所有成員都是靜態的SystemMath類的Pow方法能夠計算數值的乘方例如我們可以用MathPI域和Pow方法計算圓的面積(下例中dblRadius是圓的半徑)MathPI返回圓周率π
dblArea = MathPI * MathPow(dblRadius )
用Sqrt方法可以計算數值的平方根
例如
下面的代碼計算
的平方根
answer = MathSqrt()
用Abs方法可以返回數值的絕對值例如下面的代碼返回的絕對值answer的值將是
answer = MathAbs()
Sign方法可以返回數值的符號
如果數值是負數
Sign返回
如果是正數
Sign返回
如果是
Sign返回
Round方法把數值捨入成為最接近的整數
例如
下面的代碼捨入
這個值
answer的值將是
answer = MathRound()
如果你想要Round一個恰好處於兩個整數值之間的值
比如
則Round總是返回最接近該數值的偶數
也就是說
Math
Round(
)返回值是
而Math
Round(
)的返回值是
Floor方法用來截短一個實數
它的返回值是小於指定數值的最大整數值
例如
下面的代碼截短數值
answer的值將是
answer = MathFloor()
注意Floor方法操作負數的結果可能與你所想象的不同例如Floor()的返回值應該是
除了上面介紹的這些方法之外Math類還包含許多進行三角計算和對數計算的方法
三生成隨機數字
SystemRandom類用來生成隨機數字然而與VB的Rnd函數不同SystemRandom既能夠返回小數隨機數也能夠返回整數隨機數SystemRandom類根據系統日期和時間自動生成隨機數種子初始化隨機數生成器
用SystemRandom的NextDouble方法可以返回一個到之間的Double類型隨機數用Next方法可以返回兩個整數值之間的隨機整數NextDouble和Next都是實例方法所以在使用這些方法之前你必須先創建一個SystemRandom類型的對象下面是一個完整的ASPNET頁面它顯示了如何運用這些方法生成個隨機數字其中個隨機數字處於到之間另外個處於到之間
<%@ Page Language=vb Explicit=True%>
<head>
<title>Random實例</title>
<script language=VB runat=server>
Sub Page_Load(Src as Object E as EventArgs)
等價於VB Rnd函數的NET框架類
隨機數生成方法
Dim rnd As SystemRandom = New SystemRandom
Dim i As Integer
lblOutputText &= <table border=>
lblOutputText &= <tr><th>rndNextDouble</th> & _
<th>Next()</th></tr>
For i = To
lblOutputText &= <tr>
lblOutputText &= <td> & rndNextDouble & </td>
lblOutputText &= <td> & rndNext() & </td>
lblOutputText &= </tr>
Next
lblOutputText &= </table>
End Sub
</script>
</head>
<body>
<asp:label id=lblOutput runat=server />
</body>
</html>
下圖顯示了這個頁面的運行結果(當然如果你運行這個頁面得到的很可能是一組不同的隨機數字)
第二部分
前面我們討論了NET Framework中程序集名稱空間和類如何結合成一個整體以及如何利用內建的System類進行數學計算和生成隨機數字本文的第二部分將接著討論其他幾個有用的類包括Array類String類DateTime類等
一處理字符串
NET 框架類(或System類)提供了大量可在構造NET應用時使用的核心功能這些功能適用於任何語言環境本文的第一部分介紹了程序集名稱空間等基本概念以及SystemMath和SystemRandom類
這是本文的第二部分接著討論其他幾個很有用的類SystemStringSystemArraySystemDateTime
值得指出的是正如本文前面所提到的當我們用VBNET作為編程語言時我們常常面臨這樣一種選擇是使用VBNET語言內建的功能還是使用等價的System類功能在處理數組日期/時間字符串數據時我們就面臨這種選擇如果你曾經是一個VB 程序員你的第一個選擇可能會是經過檢驗的確實有效的老方法但是如果有可能你最好還是改掉老習慣采用新的NET System類為什麼呢?因為采用System類能夠使你的代碼更容易移植到其他NET語言以及未來的VBNET版本
SystemString類提供了豐富的字符串處理能力使用SystemString類我們可以確定字符串的長度查找子串改變字符串的大小寫比較兩個字符串分割字符串等等
確定字符串長度使用的是Length屬性例如在下面的代碼中intLength的值將是
Dim strColor As String = blue
Dim intLength As Integer
intLength = strColorlength
我們用IndexOf方法從字符串找出第一個匹配的子串
如果能夠找到子串
IndexOf方法返回子串的開始位置(第一個字符的開始位置為
)
如果不能找到
則IndexOf返回
IndexOf的查找是大小寫敏感的
IndexOf是一個被重載(Overload)的方法
它允許傳入的參數包括
Char類型的字符
String類型的字符串
Char類型的字符數組
下面這個IndexOf
aspx頁面示范了三種不同參數類型IndexOf方法的運用
<%@ Page Language=vb Explicit=True%>
<head>
<title>SystemString實例</title>
<script language=vb runat=server>
Sub Page_Load(Src as Object E as EventArgs)
Dim chrG As Char = G
Dim strWord As String = for
Dim chrVowels As Char() =
Dim strPhrase As String = _
One small step for man one giant leap for mankind
Dim i As Integer
lblOutputText &= <br />strPhrase = & strPhrase
lblOutputText &= <br />Position of chrG = _
& strPhraseIndexOf(chrG)
lblOutputText &= <br />Position of strWord = _
& strPhraseIndexOf(strWord)
lblOutputText &= <br />Position of chrVowels = _
& strPhraseIndexOf(chrVowels)
End Sub
</script>
</head>
<body>
<asp:label id=lblOutput runat=server />
</body>
</html>
這個頁面的運行結果如下
IndexOf允許指定兩個用來限制搜索的可選參數它們分別代表搜索字符串的起始和結束位置例如下面的代碼對chrVowels的搜索限制在第到個字符之間
strPhraseIndexOf(chrVowels )
LastIndexOf方法類似於IndexOf方法
但它搜索的是子串的最後一次出現
例如
如果你修改IndexOf
aspx頁面
用LastIndexOf方法來取代IndexOf方法
則strWord的位置將是
而不是
使用SystemString的ToUpper和ToLower方法可以把字符串分別改成全部大寫或者全部小寫例如
strUpper = This is a mixed case sentenceToUpper()
strLower = This is a mixed case sentenceToLower()
從這個例子可以看出
System
String的屬性和方法既可以在字符串變量中應用
也可以直接在字符串文本中應用
你可以用Compare方法比較兩個字符串是否相同如果兩個字符串相同Compare方法返回如果第一個字符串小於第二個字符串Compare返回一個負數如果第一個字符串大於第二個字符串Compare方法返回一個正數Compare是一個靜態方法(參見本文前面關於靜態方法和實例方法的說明)默認情況下Compare對字符串的比較是大小寫敏感的且不考慮地區關系例如下面對Str和Str的比較將返回它表示Str小於Str
Dim str As String =
Dim str As String = abcdCom
answer = StringCompare(str str)
我們可以向Compare傳入第三個可選的參數
如果第三個參數指定為True
則字符串比較操作忽略大小寫
比如下面的代碼中answer的值將是
即兩個字符串相等
answer = StringCompare(str str True)
正如IndexOf方法Compare也是一個被重載的方法我們可以向Compare方法傳入第四個參數要求進行地區相關的比較或者我們也可以指定字符的起始和結束位置使得比較只對字符串的一部分進行請參見NET Framework SDK文檔了解詳細信息Split方法把字符串分割成一個由子串構成的數組使用Split方法時我們必須指定用來分割字符串的Char類型的分割字符下面的Splitaspx頁面示范了Split方法的應用
<%@ Page Language=vb Explicit=True%>
<head>
<title>Split實例</title>
<script language=vb runat=server>
Sub Page_Load(Src as Object E as EventArgs)
Dim strASP As String = _
ASPNET is the next generation of Active Server Pages
Dim strWords() As String
Dim i As Integer
strWords = strASPSplit( )
For i = strWordsGetLowerBound() to strWordsGetUpperBound()
lblOutputText &= i & : & strWords(i) & <br />
Next
End Sub
</script>
</head>
<body>
<asp:label id=lblOutput runat=server />
</body>
</html>
Split
aspx的輸出結果如下
前面我們討論了String類部分屬性和方法的應用String還包括許多其他成員比如從數組構造出字符串把字符串中的一個字符替換成其他字符刪除字符串前面或者後面的空白字符等等
二操作數組
我們可以通過SystemArray類用各種方法處理數組與前面的幾個類一樣SystemString類的許多功能重復了VB語言所具有的功能但Array類也增加了一些傳統VB語言不具備的功能比如搜索和排序數組
Array類的GetLowerBound和GetUpperBound方法用於確定數組指定維的下界和上界下面這個語句來自Splitaspx(參見前面的例子)它通過GetLowerBound和GetUpperBound方法確定strWords數組的邊界
For i = strWordsGetLowerBound() to strWordsGetUpperBound()
SystemArray的Sort靜態方法能夠對一維數組的內容排序Sort方法對數組的排序是大小寫敏感的而且它不能對一維以上的數組排序調用Sort方法的語法下
ArraySort(array_name)
對於一維數組
我們還可以用Reverse方法顛倒數組元素的次序
Reverse方法的語法類似於Sort方法
ArrayReverse(array_name)
下面的代碼(來自ArraySortaspx示例頁面)示范了Sort和Reverse方法的應用
Dim strTerms() As String = {JScript VB ASP ASPNET NET}
Dim i As Integer
lblOutputText &= Original Array<br />
For i = strTermsGetLowerBound() to strTermsGetUpperBound()
lblOutputText &= i & : & strTerms(i) & <br />
Next
ArraySort(strTerms)
lblOutputText &= <br />After Sorting<br />
For i = strTermsGetLowerBound() to strTermsGetUpperBound()
lblOutputText &= i & : & strTerms(i) & <br />
Next
ArrayReverse(strTerms)
lblOutputText &= <br />After Reversing<br />
For i = strTermsGetLowerBound() to strTermsGetUpperBound()
lblOutputText &= i & : & strTerms(i) & <br />
Next
ArraySort
aspx頁面的輸出結果如下
SystemArray方法支持用IndexOf和LastIndexOf方法對一維數組進行搜索這兩個方法與SystemString類的同名方法類似用IndexOf和LastIndexOf方法搜索數組的語法如下
answer = ArrayIndexOf(array_name search_string)
answer = ArrayLastIndexOf(array_name search_string)
這兩個方法分別返回搜索字符串第一次和最後一次匹配的位置
如果不能找到
則返回值是
這種搜索是大小寫敏感的
例如
在下面的代碼中
answer將是
它表示字符串
ASP
是strTerms數組的第三個元素
Dim strTerms() As String = {JScript VB ASP ASPNET NET}
answer = ArrayIndexOf(strTerms ASP)
From:http://tw.wingwit.com/Article/program/net/201311/12109.html