Operador New (referência de C#)

Usado para criar objetos e chamar os construtores. Por exemplo:

Class1 obj  = new Class1();

Ele também é usado para criar instâncias de tipos anônimos:

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

O new também é usado para chamar o construtor padrão para tipos de valor. Por exemplo:

int i = new int();

A instrução anterior, i é inicializado para 0, que é o valor padrão para o tipo de int. A instrução possui o mesmo efeito que o seguinte:

int i = 0;

Para obter uma lista completa de valores padrão, consulte Padrão Tabela de valores (C# referência).

Lembre-se de que é um erro para declarar um construtor padrão para um struct porque cada tipo de valor implicitamente tem um construtor público padrão. É possível declarar os construtores parametrizados em um tipo de struct definir seus valores iniciais, mas isso só é necessário se diferente do padrão, os valores são necessários.

Objetos de tipo de valor, como estruturas são criados na pilha, enquanto os objetos do tipo de referência como, por exemplo, as classes são criadas na pilha. Ambos os tipos de objetos são destruídos automaticamente, mas os objetos com base nos tipos de valor são destruídos quando saem do escopo, enquanto os objetos com base nos tipos de referência são destruídos em um horário especificado após a última referência a eles é removida. Tipos de referência que consomem recursos fixos como, por exemplo, grandes quantidades de memória, identificadores de arquivo ou conexões de rede, às vezes é desejável para empregar a finalização determinística para garantir que o objeto é destruído assim que possível. Para obter mais informações, consulte usando instrução (referência de C#).

O new operador não pode ser sobrecarregado.

Se o new operador Falha ao alocar a memória, ele lança a exceção, OutOfMemoryException.

Exemplo

No exemplo a seguir, um struct objeto e um objeto de classe são criados e inicializados usando o new operador e então atribuídos valores. O padrão e os valores atribuídos são exibidos.

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
*/

Observe que no exemplo que o valor padrão de uma seqüência de caracteres é null. Portanto, não é exibida.

Especificação da linguagem C#

Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

C# Keywords

Palavras-chave de operador (referência de C#)

new (C# Reference)

Tipos anônimos (guia de programação de C#)

Conceitos

C# Programming Guide

Outros recursos

C# Reference