C#易錯易混淆知識總結
這幾天一直在複習C#基礎知識,過程中也發現了自己以前理解不清楚和混淆的概念。現在給大家分享出來我的筆記:
一,.NET平臺的重要組成部分都是有哪些
1)FCL (所謂的.NET框架類庫)
這些類是微軟事先定義好的。
例如當我們新建立一個windows窗體應用程式是,VS會幫我們自動生成下面的程式碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;using System.Threading.Tasks; using System.Windows.Forms;
這些就是微軟事先為程式設計師定義好的類庫。程式設計師可以直接使用的。
2)CLR (所謂的公共語言執行時)
建立部署.NET程式的必備環境
使用C#,F#,VB等語言都可以來建立.NET應用程式。這時候就需要一個公共語言規範,來把不同的語言解釋成.NET FramWork認識的東西。
二,什麼是程式集
程式集主要有MSIL組成(所謂的微軟中間語言,主要由dll檔案組成)
不同程式語言程式被.NET FrameWork編譯成程式集(dll檔案),當程式需要被執行時,通過CLR中的JIT(及時編譯器)編譯成原生代碼,並將指令傳送給CPU執行。
程式集一般有兩種:.dll和.exe檔案(但是不是所有的dll和exe都叫程式集)
比如:我們在同一個解決方案下,建立多個應用程式或者類庫檔案。這些程式或者類庫編譯後就會變成不同的程式集。他們之間是相互獨立的。之間如果想要相互訪問,需要新增引用。
三,Parse轉換和Convert轉換的區別
1)Parse轉換
①Parse轉換隻能轉換字串
②自變數是指定的資料型別才可以轉換成功
2)Convert轉換
①可以轉換其他型別(如:類)
②與Parse的區別就是,轉換前會對被轉換的物件進行判斷,如果物件為null則會轉換失敗
3)TryParse轉換
// // 摘要:// 將數字的字串表示形式轉換為它的等效 32 位有符號整數。一個指示轉換是否成功的返回值。 // // 引數: // s: // 包含要轉換的數字的字串。 // // result: // 當此方法返回時,如果轉換成功,則包含與 s 中所包含的數字等效的 32 位無符號整數值;如果轉換失敗,則包含零。如果 s 引數為 null 或 System.String.Empty、格式不正確,或者表示的數字小於 // System.Int32.MinValue 或大於 System.Int32.MaxValue,則轉換失敗。該引數未經初始化即被傳遞。 // // 返回結果: // 如果成功轉換了 s,則為 true;否則為 false。 public static bool TryParse(string s, out Int32 result);
型別轉換分為顯式轉換和隱式轉換,兩種轉換必須都要滿足要轉換的兩個物件的性質必須相容,若是小的轉大的(如int轉double)為隱式轉換,若大的轉小的(double轉int)為顯示轉換,要滿足語法【(轉換的型別)要轉換的內容】,這是針對兩個物件相容的情況,若不相容,則convert.to【int,double.....】(要轉換的內容)如(string轉int大的轉小的)若string中包含除數字以外的東西的話,則會報錯,其本質是呼叫int.parse方法,所以效率會稍微低點兒,但是int[double,decimal,char].tryparse[要轉換的內容,out ***(result)]不會報錯,若成功轉換,將值給物件,返回true,若不能,返回false,並且有一個方法內部預定義的值。
四,資料型別的儲存位置
1)儲存在棧中的資料型別
所有數值型別,char,bool,列舉,結構體
2)儲存在堆中
string,陣列,類
管這些型別,他們的變數的宣告都是儲存在棧裡,真實的物件儲存在堆裡面,棧裡面的變數儲存打的是物件的地址。
下面以陣列來簡單說一下這個問題:
//宣告一個一維陣列 int[] arr = new int[4];
那麼這個表示式的執行順序是什麼呢?
①首先程式會在棧中開闢一段名為arr的int[]型別的空間
②然後在堆中開闢一個int[]物件,再該物件中會有4塊連續的記憶體空間
③堆中的物件返回型別為地址,即new int[4]表示式返回的是地址
示意圖如下:
五,C#方法呼叫
1)帶預設引數的方法,預設值必須放在最右側
下面的寫法編譯器會報錯