Оператор new (Справочник по C#)

Используется для создания объектов и вызова конструкторов. Примеры.

Class1 obj  = new Class1();

Он также используется для создания экземпляров анонимных типов.

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

С помощью оператора new можно вызвать заданный по умолчанию конструктор для типов значений. Примеры.

int i = new int();

В предыдущем операторе i инициализируется значением 0, которое является значением по умолчанию для типа int. Этот оператор приводит к результату, представленному далее.

int i = 0;

Полный список значений по умолчанию см. в разделе Таблица значений по умолчанию (Справочник по C#).

Следует помнить, что объявление конструктора по умолчанию для структуры является ошибкой, поскольку каждый тип значения неявно имеет открытый заданный по умолчанию конструктор. Можно объявить параметризованные конструкторы в типе структуры, чтобы задать начальные значения, однако это необходимо, только если требуются значения, отличные от установленных по умолчанию.

Объекты типа значения, например структуры, создаются в стеке, тогда как объекты ссылочного типа, например классы, создаются в куче. Уничтожение обоих типов объектов выполняется автоматически, но объекты на основе типов значений удаляются при выходе за рамки области действия, а объекты на основе ссылочных типов — в неуказанное время после удаления последней ссылки, указывающей на них. Для ссылочных типов, использующих фиксированные ресурсы, например большой объем памяти, файловые дескрипторы, сетевые подключения, иногда рекомендуется использовать детерминированную финализацию для обеспечения скорейшего уничтожения объекта. Дополнительные сведения см. в разделе Оператор 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#