C# 變數初始化解析
導讀 | C# 變數初始化是 C# 強調安全性的另一個例子。簡單地說,C# 編譯器需要用某個初始值對變數進行初始化,之後才能在操作中引用該變數。 |
大多數現代編譯器把沒有初始化標記為警告,但C#編譯器把它當作錯誤來看待。這就可以防止我們無意中從其他程式遺留下來的記憶體中獲取垃圾值。
C# 變數初始化的操作中有兩個方法可確保變數在使用前進行了初始化:
- 變數是類或結構中的欄位,如果沒有顯式初始化,建立這些變數時,其值就預設是 0(類和結構在後面討論)。
- 方法的區域性變數必須在程式碼中顯式初始化,之後才能在語句中使用它們的值。此時,初始化不是在宣告該變數時進行的,但編譯器會透過方法檢查所有可能的路徑,如果檢測到區域性變數在初始化之前就使用了它的值,就會產生錯誤。
C# 的方法與 C++ 的方法相反,在 C++ 中,編譯器讓程式設計師確保變數在使用之前進行了初始化,在 Visual Basic 中,所有的變數都會自動把其值設定為 0。
C# 變數初始化例項解析
例如,在C # 中不能使用下面的語句:
public static int Main(){ int d; Console.WriteLine(d); // 報錯! 使用之前必須初始化 }
注意在這段程式碼中,演示瞭如何定義 Main(),使之返回一個 int 型別的資料,而不 是void。
在編譯這些程式碼時,會得到下面的錯誤訊息:
Use of unassigned local variable 'd'
考慮下面的語句:
Something objSomething;
在 C++ 中,上面的程式碼會在堆疊中建立 Something 類的一個例項。在 C# 中,這行程式碼僅會為 Something 物件建立一個引用,但這個引用還沒有指向任何物件。對該變數呼叫方法或屬性會導致錯誤。
在 C# 中例項化一個引用物件需要使用 new 關鍵字。如上所述,建立一個引用,使用 new 關鍵字把該引用指向儲存在堆上的一個物件:
objSomething = new Something();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2770637/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C# 建構函式 (初始化成員變數的角色)C#函式變數
- C# 變數C#變數
- C#之變數C#變數
- Go初始化變數的招式Go變數
- C# 變數作用域C#變數
- 瞭解下C# 變數C#變數
- C++11新初始化方法 使用{}初始化變數C++變數
- 2.7.6 改變初始化引數值
- Java變數的宣告和初始化Java變數
- 類成員變數的初始化變數
- c++成員變數初始化C++變數
- webpack 流程解析(2):引數初始化完成Web
- 12-成員變數的初始化變數
- C# 解析獲取Url引數值C#
- 淺談C#可變引數paramsC#
- c#小灶——常量、變數和賦值C#變數賦值
- C#物件初始化器C#物件
- 2.7.6.1 關於改變初始化引數的值
- 未初始化變數引發執行時故障變數
- Go語言學習(3) - 變數與初始化Go變數
- 類的成員變數的初始化順序變數
- ASP.NET Razor – C# 變數簡介ASP.NETC#變數
- 區域性靜態變數的初始化觀測變數
- 淺談Java類中的變數初始化順序Java變數
- Java初始化靜態變數的時間順序Java變數
- C++類的靜態成員變數初始化C++變數
- 開發日記(一)JAVA中變數初始化流程Java變數
- [原始碼解析] TensorFlow 之 分散式變數原始碼分散式變數
- 【Web前端培訓】預解析(變數提升)Web前端變數
- C# XML解析C#XML
- C++ 靜態變數什麼時候完成初始化C++變數
- 【C#開發】C#的協變和逆變C#
- C#用正規表示式高效替換變數C#變數
- Python執行緒條件變數Condition解析Python執行緒變數
- JavaScript中的預解析(變數提升)介紹JavaScript變數
- JavaScript中的預解析(變數提升)介紹!JavaScript變數
- js作用域(變數提升,預解析)例題JS變數
- vue生成初始化名字相近的變數並放到陣列中Vue變數陣列