2010-06-30 37 views
4

對於VS2005中的C#,如果簡單地聲明它們並且不指定任何值,那麼以下類型的變量的值是多少?即。他們的默認值是什麼?VS2005中的c#:以下類型在C#中默認使用哪些?

int 
bool 
string 
char 
enum 
+1

在VS找30秒?也許一分鐘。而'enum'不是一種類型。 – AakashM 2010-06-30 14:02:19

+0

@aakashM:所選擇的答案提供了比在30秒內可以學到的更多的東西。 – CJ7 2010-06-30 21:56:09

回答

4

如果他們在本地使用(即他們不是類或結構的成員),他們不會具有默認值。直到他們被賦予一個值(除非你明確地「新建它們」),你將無法使用它們。

如果他們是在本地使用,他們會默認爲0falsenull'\0'

編輯:您已將enum添加到列表中。 enums默認值爲0,因爲它們默認在幕後使用int。因此,無論枚舉被聲明爲0,enum(通常是第一枚枚舉,但是可覆蓋)將是默認值。如果你沒有 0值列舉出於任何原因,那麼你將有一個作爲默認值的enum無效的值。

請說明。我正在討論在類或方法的範圍內聲明變量。 - 克雷格約翰斯頓

我告訴一個小小的謊言,指出編譯器如何工作。如果你聲明瞭一個局部變量,那麼編譯器將不會編譯,如果你試圖在沒有明確地給該變量賦值的情況下使用它;其中包括null作爲參考類型。

例如:

public void Foo() 
{ 
    int bar; 
    int barPlus5 = bar + 5; // Compiler Error! 
} 

技術上bar仍然有一個默認值0,但因爲C#編譯器不會允許您使用在本地範圍的變量的默認值,局部範圍變量有效地沒有默認值。 <Ben Kenobi>所以,我從某個角度告訴你是真的。 </Ben Kenobi>

規則有例外:out參數獲得通過,因爲編譯器強制out參數在返回之前必須由方法分配,並且您可以執行int bar = new int();以獲取默認值,因爲這在技術上是分配。現在

,如果聲明一個變量作爲類的成員還是結構如如下:

public class Foo 
{ 
    public int Bar {get;set;} 
    public Foo() { } 
} 

然後你實例化美孚的地方,酒吧將有0.1

默認值

例如:

var foo = new Foo(); 
Console.WriteLine(foo.Bar); // output: 0 
+0

請解釋。我正在討論在類或方法的範圍內聲明變量。 – CJ7 2010-06-30 04:48:07

+0

@克雷格約翰斯頓:我通過編輯回覆了我的回答。 – Randolpho 2010-06-30 13:58:09

7

以下是您提到的每種類型的默認值。

int = 0 
bool = false 
string = null 
char = '\0' 
enum = 0 //behind the scenes enum is int 

有鑑於此前進,在運行時,如果你想捕捉任何類型的默認值,那麼你可以使用C#default聲明,簡單地稱呼其爲以下。

//This will print 0 on screen. 
Console.WriteLine(default(int)); 

通常,這在泛型中用於標識泛型類型參數的默認值,其中類型僅在運行時已知。

+0

我喜歡添加'default',這在我的答案中完全忽略了。如果可以,我會再給你一個+1 .. – Randolpho 2010-06-30 14:02:10

0

MSDN文章 - Value Types

所有的值類型都隱式聲明一個 公共參數實例 構造函數稱爲「默認構造函數 」。默認構造函數 返回一個零初始化實例 ,該值被稱爲 值類型的默認值。

在C#局部變量(值或 引用類型)的情況下,它們必須是 在使用之前進行初始化。

MSDN文章 - Types

被定義爲一類, 委託,陣列或接口A型爲 引用類型。在運行時,當你 聲明引用 類型的變量,該變量值爲 ,直到明確使用 new運算符創建對象的 實例,或爲其分配一個對象 有由 使用新的其他地方創建。

相關問題