Share via


new 運算子 (C# 參考)

用來建立物件並叫用 (Invoke) 建構函式。 例如:

Class1 obj  = new Class1();

它也可以用來建立匿名型別的執行個體 (Instance):

var query = from cust in customers
            select new {Name = cust.Name, Address = cust.PrimaryAddress};

new 運算子也可用來叫用實值型別 (Value Type) 的預設建構函式。 例如:

int i = new int();

在前面的陳述式中,i 會被初始化為 0,這是 int 型別的預設值。 此陳述式的效果等同於:

int i = 0;

如需預設值的完整清單,請參閱預設值表 (C# 參考)

請記住,為 struct 宣告預設建構函式會發生錯誤,因為每一個實值型別都有隱含的公用預設建構函式。 可以在結構型別上宣告參數化的建構函式以設定其初始值,但只有在需要預設值以外的其他值時,才必須這麼做。

像結構這樣的實值型別物件是建立於堆疊上,而像類別這樣的參考型別則是建立在堆積上。 兩種物件型別都會自動終結,但是依據實值型別的物件會在超出範圍時終結,而依據參考型別的物件則會在移除最後一個參考之後終結。 對於消耗固定資源 (例如,大量記憶體、檔案控制代碼或網路連線) 的參考型別,有時最好採用決定性的最終化,以確保儘速終結物件。 如需詳細資訊,請參閱using 陳述式 (C# 參考)

new 運算子無法多載。

如果 new 運算子無法配置記憶體,就會擲出例外狀況 OutOfMemoryException

範例

在下列範例中,struct 物件與類別物件都是使用 new 運算子來建立與初始化,並隨後指派值。 預設值與指派的值都會顯示出來。

struct SampleStruct
{
   public int x;
   public int y;

   public SampleStruct(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}

class SampleClass
{
   public string name;
   public int id;

   public SampleClass() {}

   public SampleClass(int id, string name)
   {
      this.id = id;
      this.name = name;
   }
}

class ProgramClass
{
   static void Main()
   {
      // Create objects using default constructors:
      SampleStruct Location1 = new SampleStruct();
      SampleClass Employee1 = new SampleClass();

      // Display values:
      Console.WriteLine("Default values:");
      Console.WriteLine("   Struct members: {0}, {1}",
             Location1.x, Location1.y);
      Console.WriteLine("   Class members: {0}, {1}",
             Employee1.name, Employee1.id);

      // Create objects using parameterized constructors:
      SampleStruct Location2 = new SampleStruct(10, 20);
      SampleClass Employee2 = new SampleClass(1234, "Cristina Potra");

      // Display values:
      Console.WriteLine("Assigned values:");
      Console.WriteLine("   Struct members: {0}, {1}",
             Location2.x, Location2.y);
      Console.WriteLine("   Class members: {0}, {1}",
             Employee2.name, Employee2.id);
   }
}
/*
Output:
Default values:
   Struct members: 0, 0
   Class members: , 0
Assigned values:
   Struct members: 10, 20
   Class members: Cristina Potra, 1234
*/

請注意範例裡字串的預設值為 null。 因此,並未顯示此值。

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格。 語言規格是 C# 語法和用法的決定性來源。

請參閱

參考

C# 關鍵字

運算子關鍵字 (C# 參考)

new (C# 參考)

匿名型別 (C# 程式設計手冊)

概念

C# 程式設計手冊

其他資源

C# 參考