C#會對於未賦值的變量/成員變量,給予一個初始值嗎?


如果我有程序如下:

C# code
 
?
1
2
3
4
5
6
7
     public  class  My
     {
         public  bool  b;
         public  int  i;
     }
     Trace.WriteLine( new  My().b.ToString());
     Trace.WriteLine( new  My().i.ToString());


那么Trace的打印結果是False, 0
而且我的VS2013的debug/release版的結果打印一致。

而下面這樣的代碼是編譯不過的error CS0165: Use of unassigned local variable 'i'

C# code
 
?
1
2
     int  i;
     Console.WriteLine(i.ToString());


我看網上說,.net只在某個版本之后開始會給變量賦默認的初始值,如果我們沒有指定值的話。我的問題是:
1 .net是從哪個版本開始支持說,編譯器會給出一個初始值,如果我沒有指定?
2 這個和工程選項有關嗎? 是否可以開啟或者關閉這一特性?
3 是否和變量是不是成員變量,是不是局部變量,是不是靜態變量有關? 我做了以及簡單的實驗,似乎類的成員和靜態變量都有默認值,而局部變量如果我不賦值的話,編譯器就不讓我用。

 

C# 有構造器。
構造器負責類中成員變量(域)的初始化。C#的類有兩種構造器:實例構造器和靜態構造器。實例構造器負責初始化類中的實例變量,它只有在用戶用new關鍵字為對象分配內存時才被調用。而且作為引用類型的類,其實例化后的對象必然是分配在托管堆(Managed Heap)上。這里的托管的意思是指該內存受.NET的CLR運行時管理。
[摘]

 

根據C#語言規范(http://msdn.microsoft.com/zh-cn/library/aa645756%28v=vs.71%29.aspx):
字段(無論是靜態字段還是實例字段)的初始值都是字段的類型的默認值(第 5.2 節)...

同樣根據C#語言規范(http://msdn.microsoft.com/zh-cn/library/aa691170%28v=vs.71%29.aspx):
...局部變量不自動初始化,因此沒有默認值...

因此,你的第3點是對的。

 

出處http://bbs.csdn.net/topics/390894972


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM