根據網友們的反饋,在接下來的兩周內,IT之家將對C#語言的基礎知識進行介紹(每天一個知識點),以便你能夠基本讀懂項目中的C#代碼。但需要說明的是,文章能夠容納的內容是極其有限的,只能提供一個學習的思路,無法涉及到C#語言的方方面面,特別是很多高級主題,你需要借助其他參考書籍來學習和掌握。
計算機程序往往需要處理各種各樣的數據,因此每一套編程語言都需要有一套完善的機制來表示這些數據,這些數據可能是一串字符(字符串)、數字等,而數字又包括整數型、浮點型等。在有些編程語言中,定義數據時並不嚴格區分數據的類型,在程序運行過程中,數據類型可根據實際情況發生變化,這種語言稱為弱類型語言,比如PHP、JavaScript這類腳本語言。而C#則是一種強類型語言,它對不同的數據類型都有不同的定義方法。數據類型又分為基本數據類型和自定義數據類型,後者是在前者基礎上由用戶自定義的一種數據類型,比如我們之前討論過的類。
基本數據類型
• 整數類型
在C#中共有8種整數類型,分別為sbyte(有符號8位)、byte(無符號8位)、short(有符號16位)、ushort(無符號16位)、int(有符號32位)、uint(無符號32位)、long(有符號64位)、ulong(無符號64位)。
這裡的位數是指二進制位數,對於有符號整形,最高位為表示正負的符號位,用n表示數據二進制位數,那麼其表示范圍為-2^(n-1)~ 2^(n-1)-1,比如32位有符號整型int的表示范圍為-2147483648~2147483647。對於無符號整型,表示范圍則為0~2^n-1,比如32位無符號整型uint表示范圍為0~4294967295。
至於為何表示范圍的最大值和最小值絕對值大小不一,這裡涉及到原碼、反碼、補碼相關的知識,請大家自行查閱資料進行學習。
• 浮點類型
浮點數用於表示非整數數字,它在計算機中的表示是比較復雜的,這裡我們只需要簡單知道C#中支持兩種浮點數即可,分別為float和double,前者為32位,後者為64位。
除此之外,還有一種特殊的浮點類型,即decimal類型,它用128位進行表示,較適合大而精確的金融類計算。
• 布爾類型
布爾類型數據bool用於表示真假兩種狀態,分別為true和false,常常用在條件判斷中。
• 字符和字符串
字符類型(char)用來表示Unicode字符,而零個或多個字符組成的有限序列則稱為字符串(string)。
變量的定義和賦值
有了數據類型我們就可以在程序中定義所需的數據,定義數據的過程稱之為變量的聲明,變量被聲明之後便可對其進行賦值。比如聲明一個字符串類型變量,代碼如下:
string name;
其中string為數據類型,包括上文介紹過的其他表示數據類型的單詞,它們在C#語言中為專用單詞,稱之為關鍵字。後面的name則是我們自定義的用於表示一個字符串變量的名稱。
聲明變量之後就可以對其進行賦值,賦值操作代碼如下所示:
name = "DouDou";
類型的分類
C#中的數據類型可分為值類型和引用類型兩類,主要根據它們在內存中的存儲和復制的方式進行區別。在以上介紹的數據類型中,只有string類型為引用類型。
舉個例子,我們定義兩個int變量:
int a = 1;
int b = a;
在內存中a和b分別占用不同的內存位置,且更改其中一個變量的值對另一個不會造成影響。值類型變量本身存儲數據值。而引用類型則不同,類似地定義兩個字符串變量:
string c = "Doudou";
string d = c;
在內存中,c和d雖然是兩個字符串變量,但它們都指向內存中同一個位置,實際上a和b兩個變量本身存儲的是內存中的位置,而不是數據本身,要訪問數據需要先從變量中讀取內存地址,才後再根據內存地址找到數據內容。
最簡單的C#程序及程序編譯
下面我們就來看一段最簡單的完整的C#程序代碼:
class HelloWorld
{
static void Main()
{
System.Console.WriteLine("Hello World!");
}
}
在之前的文章中我們已經初步接觸了類(class)的概念。C #是一門完全面向對象的編程語言,所有的語句都放在類的內部,以上代碼即定義了一個名為HelloWorld的類。與C++程序一樣,C#也有入口點函數,即程序開始運行的地方,在以上代碼中程序的入口位置就是HelloWorld類中的Main方法,並且這個方法必須為靜態(static)方法。靜態方法的特點是,不需要對類進行實例化就可以直接被調用執行。在這個最簡單的程序中,在Main方法中我們調用System.Console.WriteLine方法在控制台輸出了一串字符Hello World!,並且這一串字符占據一整行的位置。
下面我們利用前面已經學到的知識對這個簡單的程序進行修改,在控制台中輸出字符串變量對應的值,修改後的代碼如下:
class HelloWorld
{
static void Main()
{
string a = "Doudou";
string b = a;
System.Console.WriteLine(a);
System.Console.WriteLine(b);
b = "Hi";
System.Console.WriteLine(a);
System.Console.WriteLine(b);
}
}
下面我們就來編譯並運行這個程序,首先我們在D盤新建一個文本文檔,將以上代碼復制到文本文檔中,保存並重命名為HelloWorld.cs。然後我們使用微軟的Microsoft .Net編譯器對程序進行編譯。如果你已經安裝了Visual Studio,在開始菜單中找到“VS2015開發人員命令提示工具”,打開如下圖,依次執行三條命令:
上圖三條命令解釋:
• 通過cd /d d:\命令可將命令提示符的當前路徑定位到D:\
• 通過csc.exe 源代碼文件名命令可執行程序的編譯
• 編譯後的可執行文件名稱與源代碼文件名稱(除後綴名外)一致,並且保存在源代碼文件同目錄下,因此直接輸入HelloWorld.exe即可執行程序。
最後就可以看到程序執行結果:一共輸出了四行字符串,前兩行分別為a和b初次賦值後所引用字符串的值,最後兩行為對b進行重新賦值後a和b分別所引用字符串的值。
也許你會奇怪,既然a和b都是引用類型數據,保存的是數據在內存中的位置,那麼對b變量進行修改後,為什麼a的值沒有跟隨變動呢?這是因為在C#中字符串是一種特殊的引用類型數據,字符串在內存中是不可變的。當你改變字符串變量的值時,實際上是在內存中重新創建了一個新的字符串,而變量的值則被重新指向了新的字符串內存位置,因此字符串變量在使用時表現出與值類型數據相似的特性。
數組
最後我們再來了解一下數組。數組是編程語言中必須掌握的知識點,它是一種特殊的變量,也是引用類型數據,用來存儲同一種類型的多個數據的集合,比如將多個人的名字存儲在同一個變量中。
數組變量的聲明格式:先指定數組元素數據類型,後面跟一對方括號,然後是變量名。比如聲明一個字符串數組,然後對其進行賦值:
string[] names;
names = new string[]{"aa", "bb", "cc"};
在使用數組中的數據(即訪問數組)時通過方括號索引來實現,比如,我們從以上數組中取出第3個數據(數組的索引從0開始,因此第三個數據索引為2),將其復制給一個新的字符串變量,代碼如下:
string name = names[2];
本文對C#中的數據類型、最簡單的C#程序構成以及程序的編譯進行了介紹,最後又認識了一下數組這種特殊的變量。下次IT之家將對C#中的操作符、控制流程語句以及方法進行介紹。在這之前網友們需要針對以上內容廣泛查閱相關資料進行加強學習。