ú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-referenciát és az using
utasítást ismertető cikket.
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.