new – Operátor new vytvoří novou instanci typu.

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.

Vyvolání konstruktoru

Chcete-li vytvořit novou instanci typu, obvykle vyvoláte jeden z konstruktorů tohoto typu pomocí operátoru new :

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 new můžete vytvořit instanci a inicializovat objekt v jednom příkazu, jak ukazuje následující 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

Typ cíle new

Výrazy volání konstruktoru jsou typu cíle. 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, vždy používáte závorky ve výrazu typu new cíle.

Pokud je cílový typ výrazu new neznámý (například při použití klíčového var slova), musíte zadat název typu.

Vytvoření pole

Pomocí operátoru new také vytvoříte instanci pole, 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 elementy v jednom příkazu. Následující příklad ukazuje různé způsoby, jak to udělat:

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 naleznete v tématu Pole.

Vytvoření instance anonymních typů

K vytvoření instance anonymního typu použijte syntaxi operátoru new a inicializátoru objektů:

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

Zničení instancí typu

Nemusíte zničit dříve vytvořené instance typů. Instance odkazových i hodnotových typů se zničí automaticky. Instance typů hodnot jsou zničeny ihned po zničení kontextu, který je obsahuje. Instance odkazových typů jsou zničeny uvolňováním paměti v určitém okamžiku po odebrání posledního odkazu na ně.

U instancí typu, které obsahují nespravované prostředky, například popisovač souboru, se doporučuje použít deterministické vyčištění, aby se zajistilo, že se prostředky, které obsahují, uvolní co nejdříve. Další informace najdete v referenčních informacích System.IDisposable k rozhraní API a článku o příkazu using.

Přetížení operátoru

Uživatelem definovaný typ nemůže operátor přetížit new .

specifikace jazyka C#

Další informace naleznete v části Nový operátor specifikace jazyka C#.

Další informace o výrazu typu new cíle najdete v poznámce k návrhu funkce.

Viz také