C#語言與Razor語法

Download Report

Transcript C#語言與Razor語法

6
C#語言與Razor語法
•
•
•
•
•
•
•
•
6-1 C#語言與Razor語法
6-2 C#語言的基本撰寫規格
6-3 變數與資料型態
6-4 運算子
6-5 流程控制
6-6 陣列
6-7 函數
6-8 物件的使用與型態轉換
6-1 C#語言與Razor語法
• 6-1-1 認識C#語言與Razor語法
• 6-1-2 Razor語法、伺服端程式碼與ASP.NET
• 6-1-3 Razor的基本語法
6-1-1 認識C#語言與Razor語法-C#語言
• C#語言(其發音是See-Sharp)是由微軟公司Anders
Hejlsberg領導的小組開發的程式語言,Anders Hejlsberg
擁有豐富的程式語言和平台的開發經驗,曾經開發著名的
Visual J++、Borland Delphi和Turbo Pascal等。
• C#語言是在2000年6月正式推出的一種相當新的程式語言,
目前的最新版本是C# 5.0版,C#是一種簡單、現代化和物
件導向的程式語言,屬於微軟.NET Framework平台的程
式語言,支援結構化、物件基礎和物件導向程式設計。事
實上,C#語言的程序式和物件導向語法都是源於C++語言,
再參考其他多種程式語言的語法,最著名的就是Delphi和
Java。
6-1-1 認識C#語言與Razor語法- Razor語法
• Razor語法可以讓網頁程式開發者在靜態HTML網頁的標
籤中內嵌伺服端程式碼,例如:Visual Basic或C#程式碼,
其原始設計的目的是希望開發者能夠更流暢的進行程式碼
撰寫,並且讓我們快速整合伺服端程式碼來建立動態網頁
內容,和開發資料驅動的Web網站。
• 以ASP.NET技術來說,Web Forms和MVC都是將HTML標
籤和伺服端程式碼分割成不同的程式檔案,WebMatrix使
用的Web Pages開發模型,則是將伺服端程式碼內嵌於
HTML標籤中,可以讓學生、初學者或傳統ASP和PHP技
術的網頁開發者更容易進入或轉換至.NET平台的
ASP.NET伺服端網頁技術。
6-1-2 Razor語法、伺服端程式碼與ASP.NET-圖例
• Razor語法、ASP.NET與.NET Framework
之間的關係,如下圖所示:
6-1-2 Razor語法、伺服端程式碼與ASP.NET-網頁
內容
• 現在,我們回到Razor語法的ASP.NET程式碼,
因為Web網頁擁有Razor語法,所以,網頁內容
可以分為兩種,如下所示:
– 客戶端內容(Client Content):客戶端內容包含
HTML標籤、CSS樣式碼、客戶端腳本程式碼和純文字
內容,其中客戶端腳本程式碼可以是JavaScript或相關
函數庫的程式碼,例如:jQuery。
– 伺服端程式碼(Server Code):伺服端程式碼是使用
Razor語法,將Visual Basic或C#程式碼內嵌入客戶端
內容。
6-1-3 Razor的基本語法-說明
• Razor語法類似傳統ASP和PHP,它是使用
「@」字元在HTML標籤中內嵌伺服端程式
碼,可以在客戶端內容加入單行程式碼、
多行程式區塊或內嵌運算式等。
• Razor語法的ASP.NET程式,其檔案的副檔
名為: .cshtml(C#語言)或.vbhtml
(Visual Basic語言) 。
6-1-3 Razor的基本語法-單行程式碼
• Razor語法是使用「@{」和「}」包圍C#程
式碼(在@和{之間不能有空白字元),如
下所示:
@{ var amount = 100; }
@{ var msg = "第1個ASP.NET程式"; }
• 上述2行C#程式碼分別使用「@{」和「}」
包圍單行程式碼。
6-1-3 Razor的基本語法-多行程式區塊
• Razor語法也可以使用「@{」和「}」包圍
多行C#程式碼,如下所示:
@{
var amount = 100;
var msg = "第1個ASP.NET程式";
}
• 「@{」和「}」包圍的程式區塊是2行C#程
式碼。
6-1-3 Razor的基本語法-內嵌運算式
• Razor語法可以使用@字元,將C#運算式
直接內嵌於HTML標籤中,如下所示:
<p>總價: @amount</p>
<p>訊息: @msg</p>
• 上述<p>標籤中內嵌有Razor語法的運算式,
可以顯示變數amount和msg的值。
6-1-3 Razor的基本語法混用HTML標籤與伺服端程式碼
• 在Razor語法的多行程式區塊中,可以包含
HTML標籤、純文字和程式碼,如下所示:
@{
var name = "Joe";
<div>歡迎 <b>@name</b></div>
}
• 上述程式區塊宣告變數name,第2行包含
HTML標籤、文字內容和程式碼@name。
6-2 C#語言的基本撰寫規格-說明
• 程式碼在撰寫時如果使用一致規則,在程
式維護上將有一定助益,撰寫規格的目的
是為了建立一致的程式風格,以便進行小
組(Teamwork)的程式開發。
6-2 C#語言的基本撰寫規格-命名規則
• 程式設計者在替元素命名時,需要遵循程式語言
的語法。而且元素命名十分重要,因為一個好名
稱如同程式註解,可以讓程式更容易了解。C#語
言的基本命名原則,如下所示:
– 名稱不可以使用C#語言的關鍵字或系統的物件名稱。
– 必須是英文字母或底線「_」開頭,如果以底線開頭,
至少需要一個英文字母或數字。
– 在名稱中間不能有句點「.」或空白,只能是英文字母、
數字和底線。
– 區分英文大小寫,hello、Hello和HELLO分別代表不同
的名稱。
– 在宣告的有效範圍內需唯一,有效範圍請參閱第6-7-2
節的函數。
6-2 C#語言的基本撰寫規格-命名範例
• C#語言一些元素名稱的範例,如下表所示:
範例
說明
Abc、foot_123、size1、_123、 _abc
合法名稱
_、123abc、check#time、double
不合法名稱,名稱不能只有底
線、使用數字開頭、不合法字
元「#」和關鍵字
6-2 C#語言的基本撰寫規格C#語言的註解
• 程式註解(Comments)是程式十分重要的部分,
良好註解不但能夠容易了解程式目的,在維護上
也可以提供更多的資訊。C#程式註解是以「//」
符號開始的列,或程式列之後在此符號後的文字
內容,如下所示:
// 宣告變數
var amount = 100; // 宣告變數
• 程式註解也可以是使用「/*」和「*/」符號括起的
文字內容,如下所示:
/* 顯示不同
的歡迎訊息 */
6-2 C#語言的基本撰寫規格Razor語法的註解
• 在Razor語法的程式區塊可以使用之前C#語
言註解,也可以使用Razor語法的註解,這
是使用「@*」和「*@」包圍的一行至多行
註解文字,如下所示:
@{
@* 變數的宣告 *@
var size1,size2;
}
6-2 C#語言的基本撰寫規格對於太長的程式碼
• C#語言的程式碼列如果太長,基於程式編排的需求,太
長程式碼並不容易閱讀,我們可以將它分成兩列來編排。
因為C#語言屬於自由格式編排的語言,如果程式碼需要
分成兩列,直接分割即可,如下所示:
var msg = "大家好!這是比較長的程式碼, " +
"所以需要分為兩列.";
• 上述程式碼有2個字串,所以使用字串連接運算字「+」連
接2個字串(此運算子的說明請參閱本章後)。不過,我
們不能在程式碼直接分割字串,如下所示:
var msg = "大家好!這是比較長的程式碼,
所以需要分為兩列.";
6-2 C#語言的基本撰寫規格額外的空白字元
• 在程式敘述加入額外空白字元,並不會影
響程式碼的執行,如下所示:
@{
var size
}
=
1000;
6-2 C#語言的基本撰寫規格程式碼的縮排
• 在撰寫程式時記得使用縮排編排程式碼,
適當縮排程式碼,可以讓程式更加容易閱
讀,因為可以反應出程式碼的邏輯和迴圈
架構,例如:迴圈區塊的程式碼縮幾格編
排,如下所示:
for ( i = 0; i <= 10; i++ )
{
total = total + i;
}
6-3 變數與資料型態
• 6-3-1 變數的資料型態
• 6-3-2 變數、常數宣告與指定敘述
• 6-3-3 HTML編碼與純文字內容
6-3-1 變數的資料型態-1
資料型態
說明
位元組
範圍
bool
布林值
1/2
true或false
byte
正整數
1
0~255
sbyte
整數
1
-128~127
char
字元
2
0~65535
short
短整數
2
-32,768~32,767
ushort
正短整數
2
0~65,535
int
整數
4
-2,147,483,648~2,147,483,647
uint
正整數
4
0~4,294,967,295
6-3-1 變數的資料型態-2
資料型態
說明
位元組
範圍
long
長整數
8
9,223,372,036,854,775,808~9,223,372,0
36,854,775,807
ulong
正長整數
8
0~18,446,744,073,709,551,615
float
單精度的浮點數
4
-3.402823E38~3.402823E38
double
雙精度的浮點數
8
1.79769313486232E308~1.7976931348
6232E308
decimal
數值
16
-79228162514264337593543950335 ~
79228162514264337593543950335
string
字串
依平台
Unicode字元
object
物件
4
物件型別變數可以儲存各種資料型別
的值
6-3-2 變數、常數宣告與指定敘述-變數宣告
• 變數在程式碼扮演的角色是儲存程式執行中的一
些暫存資料,在C#語言是使用資料型態名稱開頭
來宣告變數,如下所示:
double area;
string name;
• 上述程式碼宣告名為area和name的變數,資料型
態分別為double和string。我們也可以在同一列程
式碼宣告多個變數,只需使用「,」號分隔,如下
所示:
uint height, width;
• 上述程式碼宣告2個正整數uint資料型態的變數。
6-3-2 變數、常數宣告與指定敘述-變數初值
• 如果需要,還可以在宣告同時指定變數的
初值,如下所示:
double area = 25.0;
string name = "陳會安";
• 上述程式碼使用「=」等號指定變數area和
name的初值。
6-3-2 變數、常數宣告與指定敘述使用var關鍵字宣告變數
• 對於伺服端程式碼來說,如果無法確認資
料型態時,我們可以使用var關鍵字來宣告
變數,如此在宣告變數時,就不用決定變
數的資料型態,如下所示:
var len = 150;
var title = "C#程式設計";
6-3-2 變數、常數宣告與指定敘述文字值
• 當變數的初值或之後指定敘述指定的值是字元、
整數值、浮點數或字串等常數值,就稱為「文字
值」(Literals)。字串的文字值是使用雙引號括
起,字元的文字值是使用單引號括起,如下所示:
string page = "我的首頁";
char a = 'A';
• 整數文字值預設是int資料型態,如果宣告uint、
long或ulong資料型態的變數,我們需要在字尾加
上字尾型態字元,指明文字值的資料型態:uint是
U/u ,long是L/l ,ulong是UL/ul ,float是f/F ,
decimal是m/M 。
6-3-2 變數、常數宣告與指定敘述-指定敘述
• 在C#宣告變數後,因為變數是用來儲存暫存資料,
我們可以隨時指定或更改變數值,指定敘述是使
用「=」等號來指定變數值。例如:指定變數
height的值,如下所示:
height = 500u;
• 上述程式碼使用指定敘述指定變數值,並且使用
字尾型態字元指定成正整數的文字值。當然變數
也可以指定成其他變數的值,如下所示:
width = height;
6-3-2 變數、常數宣告與指定敘述-常數宣告與使用
• 程式碼的常數是使用一個常數名稱來取代固定的
數值或字串,與其說是一種變數,不如說是名稱
轉換,將一些值使用有意義的名稱來取代。C#語
言的常數在宣告時一定需要指定其值,如下所示:
const double PI = 3.1415926;
• 上述程式碼使用const關鍵字宣告圓周率常數PI。
在C#程式碼可以直接使用常數來計算圓面積,如
下所示:
area = PI * 4 * 4;
6-3-3 HTML編碼與純文字內容-HTML編碼
• Razor語法在使用「@」字元開頭顯示文字內容時,
ASP.NET自動會執行HTML編碼,即將「<」符號編碼成
&lt;,「>」符號編碼成&gt;等,以避免與HTML標籤碼衝
突,造成顯示錯誤,如下所示:
@{
string name = "<Joe>";
}
<div>姓名: @name</div>
• 上述變數name的值包含「<」和「>」符號,因為
ASP.NET自動執行HTML編碼,所以最後輸出的編碼字串,
如下所示:
<div>姓名: &lt;Joe&gt;</div>
6-3-3 HTML編碼與純文字內容-「@:」符號與
<text>標籤
• 在Razor語法程式區塊如果需要顯示純文字,可以在純文
字前加上「@:」開頭,如果是多行文字內容,請使用
<text>標籤,如下所示:
@{
@:兒子姓名> @son <br/>
<text>
我的姓名是> <strong>@name</strong><br/>
目前時間是< @DateTime.Now
</text>
}
• 第1行純文字前使用「@:」開頭,之後是程式碼和<br/>標
籤,然後使用<text>標籤包圍2行包含純文字、標籤和程
式碼的內容。
6-4 運算子
•
•
•
•
•
6-4-1 運算子的優先順序
6-4-2 算術與字串連接運算子
6-4-3 關係運算子
6-4-4 邏輯運算子
6-4-5 指定運算子
6-4 運算子
• 在C#指定敘述的等號右邊可以是運算式或是條件
運算式,這些都是使用「運算子」(Operator)
和「運算元」(Operand)組成的運算式。
• C#語言提供完整算術(Arithmetic)、關係
(Relational)和邏輯(Logical)運算子。一些運
算式的範例,如下所示:
a+b–1
a >= b
a > b && a > 1
• 運算式變數a、b和數值1都屬於運算元,「+」、
「-」、「>=」、「>」和「&&」為運算子。
6-4-1 運算子的優先順序-說明
• C#語言的運算子分為很多種,在同一個運
算式如果使用多種運算子,為了讓運算式
能夠得到相同的運算結果,運算式是以運
算子預設的優先順序進行運算,也就是我
們熟知的「先乘除後加減」口訣,如下所
示:
a+b*2
• 上述運算式先計算b*2後才和a相加,這就
是運算子優先順序「*」大於「+」。
6-4-1 運算子的優先順序-預設的優先順序
運算子
說明
()、[]、++、--、.、new、
typeof、sizeof
括號、陣列元素、遞增、遞減和物件與記憶體的相關運算子
!、-、+、~、(type)
邏輯運算子NOT、負號、正號、1'補數、型態轉換
*、/、%
算術運算子的乘、除法和餘數
+、-
算術運算子加和減法
<<、>>
位元運算子左移、右移
>、>=、<、<=
關係運算子大於、大於等於、小於和小於等於
==、!=
關係運算子等於和不等於
&
位元運算子AND
^
位元運算子XOR
|
位元運算子OR
&&
邏輯運算子AND
||
邏輯運算子OR
?:
條件控制運算子
=、op=
指定運算子
6-4-2 算術與字串連接運算子算術運算子
• C#語言的算術運算子就是常用的數學運算子,大部分運
算子都是二元運算子(Binary Operators),需要2個運算
元。其中+、-運算子也可以是單元運算子(Unary
Operators)的正負號。各種算術運算子的說明與範例,
如下表所示:
運算子
說明
運算式範例
-
負號
-7
*
乘法
15 * 6 = 90
/
除法
7.0 / 2.0 = 3.5
7/2=3
%
餘數
7%2=1
+
加法
24 + 13 = 37
-
減法
24 – 13 = 11
6-4-2 算術與字串連接運算子字串連接運算子
• 「+」運算子對於數值資料型態來說,是加法,可
以計算兩個運算元的總和。如果運算元的其中之
一或兩者都是字串資料型態時,「+」運算子就是
字串連接運算子,可以連接多個字串變數或文字
值,如下表所示:
運算子
說明
運算式範例
+
字串連
接
"ab" + "cd"="abcd"
"ASP.NET網頁"+"設計"="ASP.NET網頁設計"
6-4-3 關係運算子
• C#語言的關係運算式是一種比較運算,通常是使
用在迴圈和條件敘述的判斷條件。C#語言的關係
運算子(Relational Operators)說明與範例,如
下表所示:
運算子
說明
運算式範例
結果
==
等於
16 == 13
false
!=
不等於
16 != 13
true
<
小於
16 < 13
false
>
大於
16 > 13
true
<=
小於等於
16 <= 13
false
>=
大於等於
16 >= 13
true
6-4-4 邏輯運算子-說明
• C#語言的條件運算式(Conditional
Expressions)是一種複合運算式,其每一
個運算元是關係運算子建立的關係運算式。
如果有多個關係運算式就需要使用邏輯運
算子(Logical Operators)來連接,如下所
示:
a > b && a > 1
• 上述條件運算式先執行a > b的運算,然後
才是a > 1。
6-4-4 邏輯運算子-種類
• C#語言的邏輯運算子說明與範例,如下表所示:
運算子
範例
說明
!
! op
NOT運算,傳回運算元相反的值,true成false;
false成true
&&
op1 && op2
AND運算,連接的2個運算元都為true,運算
式為true
||
op1 || op2
OR運算,連接的2個運算元,任一個為ture,
運算式為true
6-4-5 指定運算子
• C#指定運算子除了使用指定敘述「=」等號外,
指定運算子還可以配合其他運算子來簡化運算式,
建立簡潔的算術運算式,如下表所示:
運算子
範例
相當的運算式
說明
=
x=y
N/A
指定敘述
+=
x += y
x=x+y
加法或字串連接
-=
x -= y
x=x-y
減法
*=
x *= y
x=x*y
乘法
/=
x /= y
x=x/y
除法
%=
x %= y
x=x%y
餘數
6-5 流程控制
•
•
•
•
•
6-5-1 是否選和二選一
6-5-2 多選一的條件敘述
6-5-3 for與foreach迴圈
6-5-4 while與do/while迴圈
6-5-5 break和continue關鍵字
6-5 流程控制
• 流程控制是使用條件運算式來進行判斷,
以便執行不同區塊的程式碼,或重複執行
指定區塊的程式碼。流程控制指令主要分
成兩類,如下所示:
– 條件控制:條件控制是一個選擇題,可能是單
一選擇或多選一,依照條件運算式的結果,決
定執行哪一個區塊的程式碼。
– 迴圈控制:迴圈控制可以重複執行指定區塊的
程式碼,而且在迴圈中擁有結束條件,可以結
束迴圈的執行。
6-5-1 是否選和二選一if是否選條件敘述(1)
• if條件敘述是一種是否執行的單選題,只是決定是
否執行程式區塊內的程式碼,如果條件運算式的
結果為true,就執行之後的程式區塊。例如:判
斷學生成績是否及格,如下所示:
@{
int grade = 65;
if (grade >= 60) {
<div>陳會安成績及格: @grade</div>
}
}
• if條件如果為true,就執行程式區塊的程式碼,顯
示成績及格,如果false就不執行程式碼。
6-5-1 是否選和二選一if是否選條件敘述(2)
• 因為if等條件或迴圈敘述本身是一個程式區
塊,可以省略「@{」和「}」,直接在if關
鍵字前加上「@」符號即可,如下所示:
@if (grade < 60) {
@:江小魚成績不及格: @grade<br/>
}
6-5-1 是否選和二選一if/else二選一條件敘述
• if條件敘述是選擇執行或不執行程式區塊的單選題。如果
條件是擁有排它情況的2個程式區塊,只能二選一,我們
可以加上else關鍵字。如果if條件為true,就執行else之前
的程式區塊;false執行else之後的程式區塊,如下所示:
@{
int grade;
grade = 58;
if (grade >= 60) {
<div>江小魚成績及格: @grade</div>
} else {
@:江小魚成績不及格: @grade<br/>
}
}
6-5-2 多選一的條件敘述if/else/if多選一條件敘述
• if/else/if多選一條件敘述是if/else條件的擴充,只需重複使
用if/else條件,就可以建立多選一條件敘述。例如:使用
年齡來檢查購票種類,如下所示:
@{
int age = 25;
if (age <= 12) {
@:半票<br/>
} else if (age <= 65) {
@:全票<br/>
} else {
@:優惠票<br/>
}
}
6-5-2 多選一的條件敘述switch多選一條件敘述
• C#語言的另一種多選一條件敘述是switch多條件敘述,它是依照符合
條件執行不同程式區塊的程式碼,例如:學生成績是使用GPA的A、
B、C、D來打成績,我們可以顯示轉換的成績範圍,如下所示:
@switch (grade) {
case 'A':
@:超過80分<br/>
break;
case 'B':
@:70~79分<br/>
break;
case 'C':
@:60~69分<br/>
break;
default:
@:低於60分<br/>
break;
}
6-5-3 for與foreach迴圈for迴圈敘述(1)
• 在for迴圈預設擁有一個計數器,計數器每
次增加或減少一個值,直到for迴圈的結束
條件成立為止,例如:計算1加到10的總和,
每次增加1,如下所示:
for (i = 1; i <= 10; i++) {
total += i;
}
6-5-3 for與foreach迴圈for迴圈敘述(2)
• 相反情況,我們可以使用遞減for迴圈從5到
1,計數器是使用i--,表示每次遞減1,如
下所示:
for ( i = 5; i >= 1; i-- ) { … }
6-5-3 for與foreach迴圈foreach迴圈敘述
• foreach迴圈和for迴圈敘述十分相似,只不過
foreach迴圈通常是使用在集合物件或陣列,可以
顯示集合物件或陣列的所有元素,特別適用在不
知道有多少元素的集合物件或陣列時,如下所示:
@{
string[] myNames = {"陳會安", "江小魚", "陳允傑"};
}
@foreach(string name in myNames) {
@:姓名: @name <br/>
}
6-5-4 while與do/while迴圈前測式while迴圈敘述
• 前測式while迴圈敘述是使用while條件在迴圈開頭
檢查條件,以判斷是否允許進入迴圈,換句話說,
while條件如果成立時才允許進入迴圈,如下所示:
@{
int total = 0;
int counter = 1;
while (counter <=10) {
total += counter;
counter += 1;
}
}
6-5-4 while與do/while迴圈測式do/while迴圈敘述
• 後測式do/while迴圈敘述是在迴圈結尾檢查條件,
表示do/while迴圈至少會執行一次,如下所示:
@{
int counter = 1;
int total = 0;
do {
total += counter;
counter += 1;
} while (counter <= 10);
}
6-5-5 break和continue關鍵字break關鍵字中斷迴圈
• 迴圈如果尚未到達結束條件,我們可以使用break
關鍵字強迫跳出迴圈。例如:使用break關鍵字結
束for迴圈的執行,如下所示:
for (i = 1; i <= 100; i++) {
total += i;
if (i > j) break;
}
• 上述for迴圈使用if條件判斷是否執行break,當迴
圈執行到break關鍵字,就中斷迴圈的執行。
6-5-5 break和continue關鍵字continue關鍵字繼續迴圈
• C#語言的continue關鍵字可以馬上繼續下一次迴圈的執行,
而不執行程式區塊中位在continue關鍵字後的程式碼。如
果使用在for迴圈,一樣會更新計數器變數。例如:使用
continue關鍵字馬上繼續下一次while迴圈的執行,如下所
示:
while (i < 100) {
i += 1;
if (i % 2 == 0) continue;
total += i;
}
• while迴圈使用if條件判斷是否執行continue關鍵字,如果
是偶數,就馬上執行下一次迴圈,換句話說,就是計算所
有奇數的總和。
6-6 陣列-說明
• 陣列是一組同型別變數的集合,如果程式
需要使用多個相同資料型別的變數時,就
可以直接宣告一組變數的陣列,而不用宣
告一堆變數。陣列是使用陣列索引來存取
指定陣列元素的值。
6-6 陣列-一維陣列
• 一維陣列對比信箱是單排信箱,C#陣
列在宣告時需要指定陣列大小。因為
C#語言的陣列是一種物件,所以需要
使用new運算子建立陣列。例如:宣告
和建立字串陣列name[],如下所示:
string[] name = new string[4];
• 上述陣列大小為4,因為索引值是從0起算
至括號值4減一的3。
6-6 陣列-陣列初值
• 在宣告陣列的同時,也可以指定陣列元素的初值,
如下所示:
string[] nickname = {"小安", "小魚", "小乖", "小楊"};
• 或
string[] name1 = new string[4] {"陳會安", "江小魚",
"陳允傑", "楊過",};
• 程式碼使用兩種方式來宣告一維陣列且指定初值,
其中nickname[]沒有指定尺寸,其尺寸就是後方
初值的個數。
6-6 陣列-存取陣列元素
• 如果陣列沒有指定初值,我們還可以使用指定敘
述來指定陣列值,如下所示:
name[0] = "陳會安"; name[1] = "江小魚";
name[2] = "陳允傑"; name[3] = "楊過";
• 上述程式碼使用索引值來指定陣列元素。至於取
出陣列值的程式碼,如下所示:
myName = name[2];
myNick = nickname[2];
• 上述程式碼取得陣列元素索引值為2的陣列變數值,
也就是第3個陣列元素。
6-6 陣列-多維陣列
• 多維陣列擁有多個索引,對比前述信箱就是多排
信箱,二維陣列擁有2個索引;三維陣列有3個,
依序類推。事實上,只需是表格編排的資料,就
可以建立多維陣列來儲存這些資料。例如:學生
成績的二維陣列,其宣告如下所示:
string[,] students = new string[3,2];
6-7 函數
• 6-7-1 建立函數
• 6-7-2 變數的有效範圍與參數的傳遞
6-7-1 建立函數-說明
• 「函數」(Functions)是將程式中常用的
共同程式碼獨立成區塊,以便能夠重複呼
叫這些區塊的程式碼。一般來說,函數都
有傳回值,如果函數沒有傳回值,也稱為
「程序」(Procedures)。
• C#語言的函數是一個可以重複執行的程式
區塊,在ASP.NET的Razor語法可以使用
C#函數來建立自訂功能的函數。
6-7-1 建立函數-宣告函數
• C#函數是由函數名稱和程式區塊組成,我們可以新增函
數的參數列,在呼叫時傳入參數值,或以傳回值來傳回函
數的執行結果。Razor語法是將C#函數置於「@functions
{」和「}」程式區塊,如下所示:
@functions {
int sumOneToN(int max) {
int total = 0;
int counter = 1;
while (counter <= max) {
total += counter;
counter += 1;
}
return total;
}
}
6-7-1 建立函數-呼叫函數
• 函數擁有傳回值,呼叫函數通常是在運算
式指定敘述的右邊,如下所示:
@{
int total;
total = sumOneToN(100); // 呼叫函數
@:1加到100: @total <br/>
}
• 上述函數呼叫的括號內為傳入參數,以此
例是傳回1加到100的總和。
6-7-2 變數的有效範圍與參數的傳遞有效範圍
• 在C#函數宣告變數的有效範圍,也就是程
式碼可以存取此變數的範圍,如下所示:
– 區域變數範圍(Local Scope):在函數內宣告
的變數,只能在函數中使用,稱為區域變數。
– 全域變數範圍(Global Scope):如果變數是
在函數外宣告,在ASP.NET網頁中的各函數都
可以使用此變數,稱為全域變數。
6-7-2 變數的有效範圍與參數的傳遞參數傳遞
• 函數的參數傳遞方式會影響到傳入參數值是否能
夠變更,C#函數提供三種參數傳遞方式,如下表
所示:
呼叫方式
關鍵字
說明
傳值呼叫
N/A
將變數值傳入函數,並不會變更原變數值
傳址呼叫
ref
將變數實際儲存記憶體位址傳入,所以在函數
變更參數值,也會同時變更變數值
傳出呼叫
out
傳出呼叫的參數也可以變更參數值,其和傳址
呼叫的差異在於傳入的參數值並不需指定初值,
而傳址呼叫的參數一定需要指定初值
6-8 物件的使用與型態轉換
• 6-8-1 WebPage物件
• 6-8-2 資料型態的轉換
6-8-1 WebPage物件-說明
• Web Pages開發模型的ASP.NET程式本身
是一個WebPage物件,我們可以存取屬性
來取得頁面路徑、Request和Response物
件等,如下表所示:
屬性
說明
Request
取得目前HTTP請求的HttpRequest物件,此物件的屬性
是目前請求的相關資訊,例如:Request.FilePath取得目
前頁面的路徑;Request.Url取得URL網址
Response
取得目前HTTP回應的HttpResponse物件,此物件的屬性
是目前回應至瀏覽器頁面的相關資訊
6-8-1 WebPage物件-範例
• 以Request屬性來說,我們可以取得瀏覽器相關
HTTP請求的資訊,如下所示:
@{
var path = Request.FilePath;
var url = Request.Url;
var appPath = Request.ApplicationPath;
var type = Request.RequestType;
}
FilePath : @path <br/>
Url : @url <br/>
ApplicationPath : @appPath <br/>
RequestType : @type
6-8-2 資料型態的轉換-說明
• 在實務上,有時我們需要明確進行型態轉換,最
常是使用在將使用者輸入的字串資料轉換成其他
資料型態,這是一些As開頭的方法;檢查資料型
態是Is開頭的方法,如下所示:
@{
int num = 0;
string str = "123";
if (str.IsInt()) {
num = str.AsInt();
}
}
6-8-2 資料型態的轉換-常用方法
方法
說明
AsInt()
將數字內容的字串轉換成整數型態
IsInt()
檢查字串內容是否是整數型態,是傳回true
AsBool()
將true或false內容的字串轉換成布林型態
IsBool()
檢查字串內容是否是布林型態,是傳回true
AsFloat()
將擁有小數內容的字串轉換成浮點數型態
IsFloat()
檢查字串內容是否是浮點數型態,是傳回true
AsDecimal()
將擁有小數內容的字串轉換成Decimal數值型態
IsDecimal()
檢查字串內容是否是Decimal數值型態,是傳回true
AsDateTime()
將擁有日期時間內容的字串轉換成DateTime型態
IsDateTime()
檢查字串內容是否是DateTime型態,是傳回true
作業
• 請使用Razor語法建立一asp程式建立從1100的迴圈,但只顯示45~67之間的奇數,
並計算其總和