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 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.