簡體   English   中英

為什么我們使用new關鍵字來初始化結構(盡管它是值類型)

[英]Why we use new keyword for initializing structure though it's a value type

為什么我們使用new關鍵字來初始化結構,即使它是C#中的值類型?

因為這是語言規范說,你用它來初始化值類型(通過任何自定義構造函數或簡單地歸零內存(參關鍵字new()價值類型的使用),雖然有邊緣的情況下甚至不需要時)。 為同一概念添加不同的語言關鍵字似乎很奇怪。 甚至更多,因此,如果您考慮泛型:

public static T Create<T>() where T : new() // not terribly helpful, but....
{
    return new T();
}

如果引用類型和值類型使用不同的關鍵字,那么對於var zero = Create<int>() ,這將非常令人困惑。 同樣,這個例子很愚蠢,但是這里有一個重點。

使用new運算符創建結構對象時,將創建該對象並調用適當的構造函數。

但是有一個例外。 無需使用new運算符就可以實例化結構。 在這種情況下,沒有構造函數調用,這使分配更加有效。 但是,在初始化所有字段之前,這些字段將保持未分配狀態,並且無法使用該對象。

例如:

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

 // Declare an 
 CoOrds coords1;

 // Initialize:
 coords1.x = 10;
 coords1.y = 20;

暫無
暫無

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

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