operador new (Referência em C#)new operator (C# reference)

O operador new cria uma nova instância de um tipo.The new operator creates a new instance of a type.

Você também pode usar a palavra-chave new como um modificador de declaração de membro ou uma restrição de tipo genérico.You can also use the new keyword as a member declaration modifier or a generic type constraint.

Chamada de construtorConstructor invocation

Para criar uma nova instância de um tipo, você normalmente invoca um dos construtores desse tipo usando o operador new:To create a new instance of a type, you typically invoke one of the constructors of that type using the new operator:

var dict = new Dictionary<string, int>();
dict["first"] = 10;
dict["second"] = 20;
dict["third"] = 30;

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

Você pode usar um inicializador de objeto ou coleção com o operador new para instanciar e inicializar um objeto em uma instrução, como mostra o exemplo a seguir:You can use an object or collection initializer with the new operator to instantiate and initialize an object in one statement, as the following example shows:

var dict = new Dictionary<string, int>
{
    ["first"] = 10,
    ["second"] = 20,
    ["third"] = 30
};

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

Criação de matrizArray creation

Você também usar o operador new para criar uma instância de matriz, como mostra o exemplo a seguir:You also use the new operator to create an array instance, as the following example shows:

var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30

Use a sintaxe de inicialização de matriz para criar uma instância de matriz e preenchê-la com os elementos em uma instrução.Use array initialization syntax to create an array instance and populate it with elements in one statement. O exemplo a seguir mostra várias maneiras de como fazer isso:The following example shows various ways how you can do that:

var a = new int[3] { 10, 20, 30 };
var b = new int[] { 10, 20, 30 };
var c = new[] { 10, 20, 30 };
Console.WriteLine(c.GetType());  // output: System.Int32[]

Para obter mais informações sobre matrizes, confira Matrizes.For more information about arrays, see Arrays.

Instanciação de tipos anônimosInstantiation of anonymous types

Para criar uma instância de um tipo anônimo, use o operador new e a sintaxe do inicializador de objeto:To create an instance of an anonymous type, use the new operator and object initializer syntax:

var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!

Destruição de instâncias do tipoDestruction of type instances

Você não precisa destruir as instâncias do tipo criadas anteriormente.You don't have to destroy earlier created type instances. As instâncias dos tipos de referência e de valor são destruídas automaticamente.Instances of both reference and value types are destroyed automatically. As instâncias dos tipos de valor serão destruídas assim que o contexto que as contém for destruído.Instances of value types are destroyed as soon as the context that contains them is destroyed. As instâncias dos tipos de referência serão destruídas pelo coletor de lixo em um momento não especificado depois que a última referência a eles for removida.Instances of reference types are destroyed by the garbage collector at unspecified time after the last reference to them is removed.

Para instâncias de tipo que contêm recursos não gerenciados, por exemplo, um identificador de arquivo, é recomendável empregar uma limpeza determinística para garantir que os recursos que eles contêm sejam liberados assim que possível.For type instances that contain unmanaged resources, for example, a file handle, it's recommended to employ deterministic clean-up to ensure that the resources they contain are released as soon as possible. Para obter mais informações, veja o artigo System.IDisposable Referência da API e a instrução de uso.For more information, see the System.IDisposable API reference and the using statement article.

Capacidade de sobrecarga do operadorOperator overloadability

Um tipo definido pelo usuário não pode sobrecarregar o operador new.A user-defined type cannot overload the new operator.

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

Para saber mais, confira a seção O operador new na especificação da linguagem C#.For more information, see The new operator section of the C# language specification.

Consulte tambémSee also