new – operátor (Referenční příručka jazyka C#)
Operátor new vytvoří novou instanci typu.
Klíčové slovo můžete použít new také jako modifikátor deklarace členu nebo omezení obecného typu.
Volání konstruktoru
Pokud chcete vytvořit novou instanci typu, obvykle vyvoláte jeden z konstruktorů tohoto typu pomocí new operátoru :
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
Pomocí inicializátoru objektu nebo kolekce s operátorem můžete vytvořit instanci a inicializovat objekt v jednom příkazu, jak ukazuje následující new příklad:
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
Počínaje jazykem C# 9.0 jsou výrazy volání konstruktoru cílového typu. To znamená, že pokud je známý cílový typ výrazu, můžete vynechat název typu, jak ukazuje následující příklad:
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 }
};
Jak ukazuje předchozí příklad, ve výrazu typu target vždy používáte new závorky.
Pokud je cílový typ výrazu neznámý (například když použijete klíčové slovo ), musíte new var zadat název typu.
Vytvoření pole
K vytvoření instance new pole také použijete operátor , jak ukazuje následující příklad:
var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30
Pomocí syntaxe inicializace pole vytvořte instanci pole a naplňte ji prvky v jednom příkazu. Následující příklad ukazuje různé způsoby, jak to provést:
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[]
Další informace o polích najdete v tématu Pole.
Vytváření instancí anonymních typů
K vytvoření instance anonymního typu použijteoperátor a new syntaxi inicializátoru objektu:
var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!
Zničení instancí typu
Nemusíte ničit dříve vytvořené instance typu. Instance typů odkazu i hodnoty jsou automaticky zničeny. Instance hodnotových typů jsou zničeny, jakmile je zničen kontext, který je obsahuje. Instance typů odkazů jsou po odebrání posledního odkazu na tyto typy odstraněny systémem uvolňování paměti v nespecifikovanou dobu.
U instancí typu, které obsahují nespravované prostředky, například popisovač souboru, se doporučuje použít deterministické čištění, aby se zajistilo, že prostředky, které obsahují, se uvolní co nejdříve. Další informace najdete v referenčních System.IDisposable informacích k rozhraní API a v článku s příkazem using.
Přetížení operátoru
Uživatelem definovaný typ nemůže přetížit new operátor.
specifikace jazyka C#
Další informace najdete v části Nový operátor specifikace jazyka C#.
Další informace o výrazu typu target najdete new v poznámce k návrhu funkce.