720 likes | 1.08k Views
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# 語言.
E N D
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#語言一些元素名稱的範例,如下表所示:
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-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編碼,即將「<」符號編碼成<,「>」符號編碼成>等,以避免與HTML標籤碼衝突,造成顯示錯誤,如下所示: @{ string name = "<Joe>"; } <div>姓名: @name</div> • 上述變數name的值包含「<」和「>」符號,因為ASP.NET自動執行HTML編碼,所以最後輸出的編碼字串,如下所示: <div>姓名: <Joe></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-2 算術與字串連接運算子-算術運算子 • C#語言的算術運算子就是常用的數學運算子,大部分運算子都是二元運算子(Binary Operators),需要2個運算元。其中+、-運算子也可以是單元運算子(Unary Operators)的正負號。各種算術運算子的說明與範例,如下表所示:
6-4-2 算術與字串連接運算子-字串連接運算子 • 「+」運算子對於數值資料型態來說,是加法,可以計算兩個運算元的總和。如果運算元的其中之一或兩者都是字串資料型態時,「+」運算子就是字串連接運算子,可以連接多個字串變數或文字值,如下表所示:
6-4-3 關係運算子 • C#語言的關係運算式是一種比較運算,通常是使用在迴圈和條件敘述的判斷條件。C#語言的關係運算子(Relational Operators)說明與範例,如下表所示:
6-4-4 邏輯運算子-說明 • C#語言的條件運算式(Conditional Expressions)是一種複合運算式,其每一個運算元是關係運算子建立的關係運算式。如果有多個關係運算式就需要使用邏輯運算子(Logical Operators)來連接,如下所示: a > b && a > 1 • 上述條件運算式先執行a > b的運算,然後才是a > 1。
6-4-4 邏輯運算子-種類 • C#語言的邏輯運算子說明與範例,如下表所示:
6-4-5 指定運算子 • C#指定運算子除了使用指定敘述「=」等號外,指定運算子還可以配合其他運算子來簡化運算式,建立簡潔的算術運算式,如下表所示:
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-- ) { … }