C#基本文法
課程介紹
面向讀者說明C#程式設計語言的基本文法,本章要求閱讀者已經掌握了一種電腦進階程式設計語言,比如VB或C++等,理解變數、數組、條件判斷、迴圈等編程知識。達到了國家電腦等級考試二級的水平。
本章是面向C#初學者的,因此只介紹C#的基礎文法,不介紹C#的進階文法。
C#的代碼模組邏輯架構。
C#代碼模組邏輯上分為命名空間、類型、成員。
以下就是一個完整的C#原始碼內容,
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("顯示一個訊息"); } } } |
這段代碼為例說明一下C#的代碼模組組織圖。[袁永福著作權]
命名空間
命名空間就是C#最大的文法結構模組,這個模組是按照名稱來標識的。每個類型都有所屬的命名空間。同一個命名空間的類型不能重名,但不同的命名空間可以擁有相同名稱的類型。
在C#中使用以下文法結構來使用命名空間。
在本例中,使用代碼“namespace WindowsFormsApplication1”定義了一個名為“WindowsFormsApplication1”的命名空間,其中定義了名為“Form1”的類型。
對於很多程式設計語言,比如C語言,它沒有命名空間的概念,幾千個函數排列在一起,對於VB也是幾百個類混在一起,這些都會導致開發人員記憶和調用非常不方便。
而使用命名空間,就能將諸多類型層次化,利於模組化,而且方便調用。
命名空間也可以分層次,比如以下代碼。
namespace 命名空間名稱 { 若干個類型 } namespace 命名空間名稱.子命名空間 { 若干個類型 } |
這段代碼就定義了一個命名空間和子命名空間,這個層數是沒有限制的。
在C#功能代碼中,要引用某個類型必須是它的類型全名,也就是“命名空間.類型名稱”,此時代碼顯得比較臃腫,而且若未來類型的命名空間發生改變,則需要修改不少代碼。此時C#使用using關鍵字來引用命名空間。
例如在示範代碼的開頭有[袁永福著作權]一行代碼“using System.Windows.Forms;”,此時就在代碼中引用了命名空間“System.Windows.Forms”,而表單類型“Form”就在這個命名空間下面,則可以在代碼中直接使用“Form”來獲得表單的類型,若沒有這個using代碼,則必須使用“System.Windows.Forms.Form”來獲得表單類型,這就使得代碼顯得有些臃腫。從這裡看,using關鍵字的作用有點類似VB中的with關鍵字。
注意using關鍵字除了能引用命名空間外,還能形成自動銷毀對象的文法結構。
類型
命名空間下面就是定義類型了,包括類類型、結構體類型、委託類型。命名空間下面不能直接跟上欄位、函數等。因此C#沒有游離於類型之外的函數。
理論上是可以跳出命名空間而直接編寫類型,這樣也能編譯通過,但在實踐中不推薦這麼做。
在示範代碼中,使用了以下的代碼定義了一個類型。
public partial class Form1 : Form { } |
在這裡,public關鍵字說明該類型是公開的,可以被任何程式調用。
partial關鍵字說明這段代碼不是這個類型的全部代碼,C#工程中還有其他的代碼檔案包含了這個類型的代碼,在編譯器的時候,編輯器[袁永福著作權]會收集這些分散的原始碼收集起來組成一份完整的原始碼參與編譯。
class關鍵字說明這是在定義一個類類型。
Form1是新類型的名稱。
Form是跟在Form1後面,中間有一個引號,這個說明新增的類型Form1是整合自已有的類型Form。若前面沒有代碼“using System.Windows.Forms.Form”引用命名空間,則該行代碼必須寫成“public partial class Form1 : System.Windows.Forms.Form”。
Form後面跟著一對花括弧就定義了它的類型成員定義地區。
成員
類型下面就是定義類型的成員了,包括欄位、屬性、方法和事件。
在示範代碼中,使用以下代碼定義了一個名為Form1的成員方法。
public Form1() { InitializeComponent(); } |
該方法名稱和類型名稱一樣,而且沒有定義傳回值,因此該方法就是該類型的建構函式。
以下代碼定義了一個成員方法。
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("顯示一個訊息"); } |
在這段代碼中,private關鍵字說明該方法是私人的,只能在本類型內部使用,類型之外就不能使用。
void關鍵字說明該方法沒有任何傳回值。
button1_Click是該方法的名稱。
“object sender”定義了該方法的第一個參數,object是參數類型,sender是參數名;類似的“EventArgs e” 定義了第二個參數,兩個參數之間用逗號分開。
函式宣告後面就是函[袁永福著作權]數體了。在這裡使用了一行代碼“MessageBox.Show("顯示一個訊息");”,這行代碼調用了類型MessageBox的Show方法,參數是字串“"顯示一個訊息"”。這行代碼就是調用類型System.Windows.Forms.MessageBox的Show靜態方法來顯示一個簡訊框。
注意在寫C#代碼時,記得要根據需要寫上分號“;”。