Operador new (Referência em C#)new operator (C# Reference)

Usado para criar objetos e invocar construtores.Used to create objects and invoke constructors. Por exemplo:For example:

Class1 obj  = new Class1();

Ele também é usado para criar instâncias de tipos anônimos:It is also used to create instances of anonymous types:

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

O operador new também é usado para invocar o construtor sem parâmetro para tipos de valor.The new operator is also used to invoke the parameterless constructor for value types. Por exemplo:For example:

int i = new int();

Na instrução anterior, i é inicializado como 0, que é o valor padrão do tipo int.In the preceding statement, i is initialized to 0, which is the default value for the type int. A instrução tem o mesmo efeito que o seguinte:The statement has the same effect as the following:

int i = 0;

Para ver uma lista completa dos valores padrão, consulte Tabela de valores padrão.For a complete list of default values, see Default Values Table.

Lembre-se de que é um erro declarar um construtor sem parâmetro para um struct, porque cada tipo de valor tem implicitamente um construtor sem parâmetro público.Remember that it is an error to declare a parameterless constructor for a struct because every value type implicitly has a public parameterless constructor. É possível declarar construtores parametrizados em um tipo de struct para definir seus valores iniciais, mas isso só é necessário se valores diferentes do padrão forem necessários.It is possible to declare parameterized constructors on a struct type to set its initial values, but this is only necessary if values other than the default are required.

Tanto os objetos de tipo de valor, como structs, quanto os objetos de tipo de referência, como as classes, são destruídos automaticamente, mas os objetos de tipo de valor são destruídos quando o contexto que os contém é destruído, enquanto que os objetos de tipo de referência são destruídos pelo coletor de lixo em um momento não especificado, depois que a última referência a eles é removida.Both value-type objects such as structs and reference-type objects such as classes are destroyed automatically, but value-type objects are destroyed when their containing context is destroyed, whereas reference-type objects are destroyed by the garbage collector at an unspecified time after the last reference to them is removed. Para tipos que contêm recursos, como identificadores de arquivos ou conexões de rede, é desejável empregar limpeza determinística para garantir que os recursos que eles contêm sejam liberados assim que possível.For types that contain resources such as file handles, or network connections, it is desirable to employ deterministic cleanup to ensure that the resources they contain are released as soon as possible. Para obter mais informações, consulte Instrução using.For more information, see using Statement.

O operador new não pode ser sobrecarregado.The new operator cannot be overloaded.

Se o operador new não conseguir alocar memória, ele gerará a exceção OutOfMemoryException.If the new operator fails to allocate memory, it throws the exception, OutOfMemoryException.

ExemploExample

No exemplo a seguir, um objeto struct e um objeto de classe são criados e inicializados usando o operador new e, em seguida, valores atribuídos.In the following example, a struct object and a class object are created and initialized by using the new operator and then assigned values. Os valores padrão e atribuídos são exibidos.The default and the assigned values are displayed.

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, no exemplo, que o valor padrão de uma cadeia de caracteres é null.Notice in the example that the default value of a string is null. Portanto, ele não é exibido.Therefore, it is not displayed.

Especificação da linguagem C#C# language specification

Para obter mais informações, consulte a Especificação da linguagem C#.For more information, see the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Consulte tambémSee also