Compartilhar via


Operador new – o operador new cria uma instância de um tipo

O operador new cria uma nova instância de um tipo. 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.

A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.

A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.

Dica

Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.

Chamada de construtor

Para criar uma nova instância de um tipo, invoque um dos construtores desse tipo usando o new operador:

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:

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

new com tipo de destino

As expressões de invocação do construtor têm o tipo de destino. Ou seja, se um tipo de destino de uma expressão for conhecido, você poderá omitir um nome de tipo, como mostra o seguinte exemplo:

List<int> xs = new();
List<int> ys = new(capacity: 10_000);
List<int> zs = new() { Capacity = 20_000 };

Dictionary<int, List<int>> lookup = new()
{
    [1] = new() { 1, 2, 3 },
    [2] = new() { 5, 8, 3 },
    [5] = new() { 1, 0, 4 }
};

Como mostra o exemplo anterior, sempre use parênteses em uma expressão tipo new destino.

Se o tipo de destino de uma expressão new for desconhecido (por exemplo, quando você usa a palavra-chave var), deverá especificar um nome de tipo.

Criação de matriz

Você também usar o operador new para criar uma instância de matriz, como mostra o exemplo a seguir:

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. O exemplo a seguir mostra várias maneiras de como fazer isso:

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.

Instanciação de tipos anônimos

Para criar uma instância de um tipo anônimo, use o operador new e a sintaxe do inicializador de objeto:

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

Destruição de instâncias do tipo

Você não precisa destruir instâncias de tipo criadas anteriormente. O sistema destrói automaticamente instâncias de tipos de referência e valor. O sistema destrói instâncias de tipos de valor assim que o contexto que os contém é destruído. O coletor de lixo destrói instâncias de tipos de referência em algum momento não especificado após a última referência a eles ser removida.

Para instâncias de tipo que contêm recursos não gerenciados, como um identificador de arquivo, empregue a limpeza determinística para garantir que os recursos sejam liberados o mais rápido possível. Para obter mais informações, consulte a System.IDisposable Referência da API e o artigo using de instrução.

Capacidade de sobrecarga do operador

Um tipo definido pelo usuário não pode sobrecarregar o operador new.

Especificação da linguagem C#

Para saber mais, confira a seção O operador new na especificação da linguagem C#.

Para obter mais informações sobre uma expressão de tipo de destino new, confira a nota de proposta de recurso.

Confira também