在代碼中咱們常常能看到下面這樣的語句。 A a = new A();(1) B b = null;(2) C c;(3) 代碼( 1 ) 建立 A 的對象並對其進行初始化。 A :類; new A() :建立 A 的對象並對其初始化; a :引用,指向 new A() 這個對象的引用。 注意: a 不是 A 的對象, new A() 纔是 A 的對象。 代碼( 2 ) 聲明 引用 b ,並指向 null 。 B :類; b :引用,指向的對象爲 null (空)。 代碼( 3 ) 與代碼( 2 )同樣,聲明一個 引用 。 與代碼( 2 )的區別是:代碼( 3 )中 聲明 的引用 c 不指向任何對象。 提示:變量本質上是引用的一個別名而已 。 由上面的分析能夠了解到,在 C# 中實例化一個對象時,須要經歷下面這幾步: 聲明引用; 使用 new 關鍵字建立類的對象並對其初始化;(分配內存空間) 將引用指向類的對象。 若沒有使用 new關鍵字 建立類的實例,則僅僅建立引用,指向的對象爲 null 。 實例說明 public class ExampleModel { public int C1 { get; set; } public string C2 { get; set; } } ExampleModel e1 = new ExampleModel(); ExampleModel e2 = null; ExampleModel e3; if (e1 == null) { Console.WriteLine("e1 == null"); } else { Console.WriteLine("{ C1 = " + e1.C1 + ", C2 = " + e1.C2 + " }"); } if (e2 == null) { Console.WriteLine("e2 == null"); } else { Console.WriteLine("{ C1 = " + e2.C1 + ", C2 = " + e2.C2 + " }"); } if (e3 == null) { Console.WriteLine("e3 == null"); } else { Console.WriteLine("{ C1 = " + e3.C1 + ", C2 = " + e3.C2 + " }"); } 編譯代碼,會出現編譯錯誤,提示「使用了未賦值的局部變量 e3 」,緣由是並未對 e3進行初始化,可是使用 e2 變量時並不會產生編譯錯誤,由於 e2 已經被初始化了,只是初始化的值爲 null 而已,這並不影響編譯的經過。 註釋掉e3 部分的代碼,運行程序獲得下圖所示的結果。 在開發過程當中,咱們仍是儘可能不要讓一個引用指向 null ,不然在運行過程當中很容易出現空引用的異常。 修改 e2 部分的代碼, 去掉e2是否爲空引用的條件判斷, 並運行程序。 運行中,會產生「未將對象引用設置到對象的實例。」的異常。(緣由你懂的。) 一樣去掉 e1 部分中是否爲空引用的條件判斷語句,再次執行程序,一切正常。(由於e1指向了不爲null的對象)