új operátor – Az new operátor létrehoz egy új típusú példányt

Az new operátor létrehoz egy új típusú példányt. A kulcsszót new tagdeklaráció-módosítóként vagy általános típusmegkötésként is használhatja.

Konstruktor-meghívás

Egy típus új példányának létrehozásához általában az ilyen típusú konstruktorok egyikét kell meghívnia az new operátorral:

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

Egy objektum vagy gyűjtemény inicializálóját használhatja az new operátorral egy objektum példányosítására és inicializálására egy utasításban, ahogyan az alábbi példa mutatja:

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

Céltípus new

A konstruktor-meghívási kifejezések cél típusúak. Ha egy kifejezés céltípusa ismert, kihagyhat egy típusnevet, ahogy az alábbi példa is mutatja:

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 }
};

Ahogy az előző példa is mutatja, mindig zárójeleket használ egy cél típusú new kifejezésben.

Ha egy new kifejezés céltípusa ismeretlen (például a var kulcsszó használatakor), meg kell adnia egy típusnevet.

Tömb létrehozása

Az operátorral new tömbpéldányt is létrehozhat, ahogy az alábbi példa is mutatja:

var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30

A tömb inicializálási szintaxisával tömbpéldányt hozhat létre, és feltöltheti egy utasítás elemeivel. Az alábbi példa különböző módokon mutatja be, hogyan teheti ezt meg:

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[]

A tömbökről további információt a Tömbök című témakörben talál.

Névtelen típusok példányosítása

Névtelen típusú példány létrehozásához használja az operátor és az new objektum inicializáló szintaxisát:

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

Típuspéldányok megsemmisítése

Nem kell megsemmisítenie a korábban létrehozott típuspéldányokat. A referencia- és értéktípusok példányai automatikusan megsemmisülnek. Az értéktípusok példányai azonnal megsemmisülnek, amint az őket tartalmazó környezet megsemmisül. A hivatkozástípusok példányait a szemétgyűjtő néhány meghatározatlan időpontban megsemmisíti, miután az utolsó hivatkozás el lett távolítva.

Olyan típuspéldányok esetében, amelyek nem felügyelt erőforrásokat, például egy fájlkezelőt tartalmaznak, ajánlott determinisztikus tisztítást alkalmazni annak biztosítása érdekében, hogy az általuk tartalmazott erőforrások a lehető leghamarabb felszabaduljanak. További információkért tekintse meg az System.IDisposable API-referencia és a használati utasítás cikkét.

Operátorok túlterhelése

A felhasználó által definiált típus nem terhelheti túl az operátort new .

C# nyelvspecifikáció

További információ: A C# nyelv specifikációjának új operátor szakasza.

A cél típusú new kifejezéssel kapcsolatos további információkért tekintse meg a funkciójavaslat megjegyzését.

Lásd még