C# 基本語法、變數
程式碼後置網頁模型(.aspx + .aspx.cs) ASP.NET網頁程式撰寫模型 撰寫ASP.NET程式有兩種網頁程式碼模型(Page Code Model)可選擇 。 網頁撰寫模型 單一檔案網頁模型(.aspx) 程式碼後置網頁模型(.aspx + .aspx.cs) ASP.NET網頁程式撰寫模型
單一檔案網頁模型 所謂的單一檔案網頁模型(Single-File Page Model)就是將所有的HTML宣告、ASP.NET標記、伺服器控制項、靜態文字及C# 全部混合寫在一個.aspx檔案之中 這種方式也稱為「Inline Code」,早期的ASP程式就是採用這種模型
程式一 程式二 <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> public string getTime()程式一 { return DateTime.Now.ToLongTimeString(); } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>未命名頁面</title> </head> <body> <form id="form1" runat="server">程式二 <div> 現在伺服器時間是:<% =getTime() %> </div> </form> </body> </html> 程式一 程式二
程式說明: 程式一是一段內嵌的C# 的方法(Method,亦可稱之為函數或副程式),裡面定義了一個getTime()方法,其作用是透過DateTime.Now來回傳伺服器時間。程式二是呼叫getTime()方法,這段C# 程式是在後端伺服器執行。 程式二「<% %>」這表示執行後端伺服器上的運算,而非前端的HTML運算。 執行ASP.NET程式有三種方式: 在瀏覽器中檢視 在InlineCode.aspx程式按滑鼠右鍵選擇【在瀏覽器中檢視】,如此便可執行InlineCode.aspx網頁程式(無偵錯)。
在瀏覽器中檢視 設定為起始頁 在瀏覽器檢視
以【F5】偵錯模式執行 首先必須將InlineCode.aspx設定為起始頁,再以【F5】執行程式,這是一種可以進行偵錯的模式。 以【Ctrl】+【F5】無偵錯模式執行 首先也是必須將InlineCode.aspx設定為起始頁,再以【Ctrl】+【F5】執行程式,這是一種無偵錯的執行模式。
Code-Behind的Web Form檔案結構 程式碼後置網頁模型 程式碼後置網頁模型:口語稱之為Code-Behind)是將C# 程式由從網頁Tag檔中抽離,讓Tag及控制項標籤保留在.aspx檔案中,而C# 程式邏輯儲存在另一個.aspx.cs檔案之中,如此是一種最理想的開發與維護模型,同時也利於偵錯。 Code-Behind的Web Form檔案結構
C# 程式結構及程式註解 SampleFile.aspx.cs程式碼及註解:
說明如下: 命名空間 .NET程式使用到的類別庫(Class Library)功能都是包含在命名空間(Namespace)之中 。 partial class部分類別宣告 ASP.NET的Code-Behind程式檔,對於預設的類別名稱皆是以「partial class」來宣告,partial class中文稱之為「部分類別」。 類別名稱 這是Code-Behind檔中的類別名稱,一般預設是和Web Form 的名稱一致。
繼承Page類別 冒號(:)表示SampleFile類別繼System.Web.UI.Page類別的功能。 Page類別 Page類別含有Web Form所需的基礎功能,故絕大多數情況下,Code-Behind的Web Form表單類別都會繼承Page類別,以繼承所需的相關功能。 Page_Load事件處理常式 這個事件是每個Web Form表單一載入(Load)就會執行的事件處理常式。 多行註解 如果想將程式註解分為好幾行,可以使用/* … **/符號來進行多行註解。
單行註解 如果程式註解只有一行,直接使用雙斜線//符號註解即可。 控制項之事件處理常式 一般若對ASP.NET控制項雙擊(Double Click)之後,就會產生一段事件處理常式,於其中就可加入欲執行的程式。 XML文件註解 當程式加入XML文件註解後,編譯器將會搜尋原始程式碼中的所有 XML 標記,然後建立 XML 文件檔。 自訂Method方法 若在類別中自訂一些Function或副程式,C# 稱之為「Method」,中文稱叫做「方法」,其實是一樣的意思。
變數與型別 .NET Framework變數可分為兩大類型:實值型別、 參考型別: 實值型別(Value Type) 實值型別直接存放真正的資料。所以每個實值型別的資料是各自獨立的,即使一個實值型別的資料被修改,亦不會影響其他實值型別的資料。 參考型別(Reference Type) 參考型別所儲存的是指向真正資料位址的指標。而一個資料可能會被多個參考型別變數參考,因此若改變了其中一個變數,進而最原始的資料亦會改變,將影響所有參考這個位址的所有變數。
型別分類圖
.NET Framework內建的實值型別
變數宣告與初始化 Framework型別與C# 型別之間會形成一個對應關係,但最終都會轉換成.NET Framework型別。
變數的宣告語法如下: 資料型別 變數名稱; 宣告一個string字串型別的名字變數: string lastName; 宣告一個整數型別的年齡變數: int age; 宣告一個Decimal型別的銀行存款金額及利率: decimal money; decimal rate;
變數初始化 初始化的方式有兩種:一是使用new關鍵字呼叫變數型別的建構式(Constructor);第二種方式是直接指定一個初始值給變數 。 以new關鍵字初始化區域變數 int age=new int(); age=99; 直接指定區域變數初始值 int age=99;
變數命名規則及建議 變數命名規則 : 變數名稱命名,建議開頭請以字母來命名。 接著在第一個字母之後可以使用字母、數字或底線來命名。 變數名稱嚴格區分大小寫,如MyVal與myVal二者將視為不同的二個變數。 禁止使用系統的保留關鍵字,因為關鍵字是對編譯器有特殊意義而預先定義的保留事項,所以若不小心使用到保留字,在程式編譯時將會發生錯誤。
常數 C# 使用「const」關鍵字來宣告常數。
日期時間型別 (System.DateTime) C#對於日期時間的處理是使用 .NET Framework 內建的 System.DateTime 類別DateTime 類別可以設定或取得某一日期與時間的數值, 建立物件的語法如下: DataTime d = new DateTime(西元年 ,月 ,日 [,時 ,分 ,秒 ]); //建立物件 d 代表 2011 年 10 月 18 日 DataTime d = new DateTime(2011,10,18); //建立物件 d 代表 2011 年 3 月 12 日 1 時 3 分 5 秒 DataTime d = new DateTime (2011,3,12,1,3,5);
資料型別之轉換 將string字串型別的12345,轉換為int型別的12345,而這樣的過程就稱之為「型別轉換」。 而資料型別的轉換又可分為兩種:隱含轉換、明確轉換。
隱含轉換(Implicit Conversions) 例如:將整數(int)轉換成長整數(long)兩種不同型別,可以直接將int值指定給long型別變數,而不必下達任何額外的轉換指令: int height = 180; long h = height;
明確轉換(Explicit Conversions) 相對於隱含轉換,另一種是程式設計師必須自行轉換,這種就稱之為明確轉換。 明確轉換語法: (轉換型別)原始數值 int與short兩種型別轉換 : //不合法的隱含轉換 h = height; w = weight; //合法的明確轉換 h = (short)height; w = (short)weight;
明確轉換轉換注意事項: 明確數值轉換可能會遺失小數位數或造成擲回例外狀況。 當decimal值轉換成整數類資料型別時,這個值會捨入小數點後的數字至零,成為最接近的整數值。 當double或float值轉換成整數類資料型別時,此值會被截斷。 當double轉換成float時,double值會捨入為最接近的float值。 當float或double轉換成decimal時,來源值會轉換為decimal表示,並捨入至最接近第28位小數位置的數字 。 當decimal轉換成float或double時,decimal值會捨入為最接近的double或float值。
萬用的型別轉換指令~Convert 型別的轉換有隱含及明確兩種方式,但還是有許多時候,還是會遇見這兩種方式都無法完成型別轉換的工作。
Convert類別支援的型別轉換方法
數值轉字串 int i=100; string myString=Convert.ToString(i); Response.Write(myString); 字串轉數值 string myString="100"; int i=Convert.ToInt32(myString); Response.Write(i);