首先我們要知道C#語言是一種面向對象的語言由C和C++演變而來,它依賴於.NET Framework。.NET Framework可以提供一個強大的代碼庫供其調用。之所以說C#語言依賴於.NET Framework是由於C#源代碼只有經過編譯器(指VS或VCE)的編譯之後,變成CIL(Common Intermediate Language)通用中間語言。其實通常是我們常見的.exe或者.dll文件也叫作程序集。當我們運行.exe文件時,程序集將被CLR—公共語言運行時(Common Language Runtime)翻譯為CPU的指令然後交由CPU完成。所以我們用C#只能編寫托管環境下的代碼(要受CLR控制)。學過JAVA的人可以把CLR理解為JAVA虛擬機,主要負責管理內存、處理安全性、垃圾回收、以及跨語言調試等。
學習一門編程語言我們還要了解它的基本語法:關於語法大家只要有一本系統介紹C#語言的書大致都差不多。
1、關於顯示轉換和隱式轉換
隱式轉換:類型A到B在所有情況下都可以進行,編譯器自主進行轉換。那麼什麼時候執行隱式轉換呢?-只要類型A的取值范圍完全包含在取值B中就可以執行隱式轉換。
1 char str = 'a'; 2 ushort newStr; 3 newStr = str; 4 Console.WriteLine("str {0}", str); 5 Console.WriteLine("newStr {0}", newStr); 隱式轉換
輸出結果:str a
newStr 97
此時編譯器自動執行了隱式轉換。ushort和char類型的取值范圍都在0~65535之間,所以可以執行類型轉換。
顯式轉換:微軟在程序中為我們提供了顯示轉換相關的方法(Convert)。但要注意溢出問題,如果實際需要轉換的A類型值超過了B類型的取值范圍就會發生溢出,但系統默認不會報錯,但是會造成數據丟失。可以通過chack方法進行檢查。
short str = 285; byte newStr; newStr =Convert.ToByte(str); Console.WriteLine("str {0}", str); Console.WriteLine("newStr {0}", newStr); 顯式轉換會報: 值對於無符號的字節太大或太小。
2 函數中的參數問題
首先注意函數調用時實參和形參要類型匹配。
c#允許指定一個(也只能是一個)特定的參數,必須是參數的最後一個用params修飾,稱為參數數組。
static int sumVals(params int[] vals) { int sum=0; foreach(int val in vals) { sum+=val; } return sum; } 求和函數引用參數 ref 和 out
ref的特點是有進有出,即在傳遞參數之前就已經對它進行賦值,在傳入方法體時,是將該數的地址傳了進來,如果對其進行相應的賦值操作,直接改的是地址裡的值,所以,當該方法執行完,該數的值也就跟著改變了。而out與ref的唯一區別是,在方法接收參數後,對它進行初始化(如果沒有初始化,將會報錯的),其余的用法都和ref一樣。
ref 關鍵字使參數按引用傳遞,當執行調用方法時,在方法中對參數的任何更改都將反映在該變量中。學過C++可以類比引用。
class Ref { static void refExample(ref int i) { i = 20; } static void Main() { int val = 0; refExample(ref val); Console.WriteLine(val);//此時打印出20 } } 引用參數static void Main(string[] args) { int i ; Add( out i); Console.WriteLine(i);//結果輸出11 } static void Add(out int i) { i=10; //如果沒有這個賦值,將會報錯的 i = i + 1; } ref和out不同