簡體   English   中英

VS2005中的c#:C#中默認的以下類型是什么?

[英]c# in VS2005: what do the following types default to in C#?

對於VS2005中的C#,如果簡單地聲明並且沒有賦值給任何值,那么以下類型的變量值是多少? 即。 它們的默認值是多少?

int
bool
string
char
enum

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

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));

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

如果他們在本地使用(即他們不是一類或結構的成員),他們將不會默認值。 在為它們分配值之前,您將無法使用它們(除非您明確地“新建它們”)。

如果它們不在本地使用,它們將默認為0falsenull'\\0'

編輯:您已將enum添加到列表中。 enums默認值為0,因為默認情況下它們在后台使用int 因此,枚舉被聲明為enum 0(通常是第一個枚舉,但是可以覆蓋)將是默認值。 如果你沒有出於任何原因0值枚舉,那么你就必須為你的無效值enum為默認值。

請解釋。 我在談論聲明類或方法范圍內的變量。 - 克雷格約翰斯頓

我說了一個小小的謊言來指出編譯器是如何工作的。 如果聲明一個局部變量,如果您嘗試使用它而沒有首先明確地為該變量賦值,編譯器將無法編譯; 包含引用類型的null

例如:

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

從技術上講bar仍然具有默認值0,但由於C#編譯器不允許您在本地范圍的變量中使用該默認值,因此本地范圍的變量實際上沒有默認值。 <Ben Kenobi>從某個角度來看,我告訴你的是真的。 </Ben Kenobi>

規則有例外:out參數得到一個pass,因為編譯器強制out參數必須在返回之前由方法賦值,你可以執行int bar = new int(); 獲取默認值,因為這在技術上是一個任務。

現在,如果將變量聲明為類或結構的成員,如下所示:

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

然后你在某處實例化Foo,Bar的默認值為0。

例如:

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

MSDN文章 - 值類型

所有值類型都隱式聲明一個名為“default constructor”的公共無參數實例構造函數。 默認構造函數返回一個零初始化實例,稱為值類型的默認值。

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

MSDN文章 - 類型

定義為類,委托,數組或接口的類型是引用類型。 在運行時,當您聲明引用類型的變量時,該變量包含值null,直到您使用new運算符顯式創建對象的實例,或者為其指定一個使用new在其他位置創建的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM