Sdílet prostřednictvím


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.

Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.

Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.

Návod

Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.

Vyvolání konstruktoru

Chcete-li vytvořit novou instanci typu, 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žívejte 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ů. Systém automaticky zničí instance referenčních i hodnotových typů. Systém zničí instance hodnotových typů ihned po zničení kontextu, který je obsahuje. Systém uvolňování paměti zničí instance typů odkazů v určitém nezadaném čase po odebrání posledního odkazu na ně.

Pro instance typů, které obsahují nespravované prostředky, jako je popisovač souboru, využívají deterministické vyčištění, aby se zajistilo, že se prostředky uvolní co nejdříve. Další informace najdete v referenčních informacích System.IDisposable k rozhraní API a článku o using příkazu .

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é