Compartilhar via


Operador new (Referência de C#)

Usado para criar objetos e chamar 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 operador também é usado para chamar o construtor padrão para tipos de valor. Por exemplo:

int i = new int();

Na 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 Tabela de valores padrão (Referência de C#).

Lembre-se de que ele é 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 para definir seus valores iniciais, mas isso só é necessário se os valores diferente do padrão são obrigató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. Os dois 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 tempo não especificado após a última referência a eles é removida. Para tipos de referência que consomem recursos fixos, como 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 mais rápido possível. Para obter mais informações, consulte Instrução using (Referência de C#).

O new operador não pode ser sobrecarregado.

Se a 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, em seguida, atribuímos 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, ele não será exibido.

Especificação da linguagem C#

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

Consulte também

Referência

Palavras-chave C#

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

new (Referência de C#)

Tipos anônimos (Guia de Programação em C#)

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#