Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
novo operador - O
O new operador cria uma nova instância de um tipo. Você também pode usar a new palavra-chave como um modificador de declaração de membro ou uma restrição de tipo genérico.
A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.
A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.
Sugestão
Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.
Invocação do 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 new operador 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
Segmentado new
As expressões de invocação do construtor são tipificadas 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 exemplo a seguir:
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, use sempre parênteses numa expressão de tipo new alvo.
Se um tipo de destino de uma new expressão for desconhecido (por exemplo, quando você usa a palavra-chave var ), você deve especificar um nome de tipo.
Criação de matrizes
Você também usa o new operador 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 da matriz para criar uma instância de matriz e preenchê-la com elementos em uma instrução. O exemplo a seguir mostra várias maneiras de 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, consulte Matrizes.
Instanciação de tipos anónimos
Para criar uma instância de um tipo anônimo, use a sintaxe do operador e do new inicializador de objeto:
var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!
Destruição de instâncias de tipo
Não precisas de destruir instâncias de tipo previamente criadas. O sistema destrói automaticamente instâncias tanto de tipos de referência como de 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 num momento não especificado, depois de a última referência a eles ser removida.
Para instâncias de tipo que contenham recursos não geridos, como um handle de ficheiro, utilize limpeza determinística para garantir que os recursos são libertados o mais rapidamente possível. Para obter mais informações, consulte a referência da System.IDisposable API e o artigo da using instrução .
Capacidade de sobrecarga do operador
Um tipo definido pelo usuário não pode sobrecarregar o new operador.
Especificação da linguagem C#
Para obter mais informações, consulte A seção O novo operador da especificação da linguagem C#.
Para obter mais informações sobre uma expressão digitada new de destino, consulte a nota de proposta de recurso.