Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
új operátor – Az
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.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
Konstruktor-meghívás
Egy típus új példányának létrehozásához hívja meg az ilyen típusú konstruktorok egyikét 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 használjon zárójeleket 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 rendszer automatikusan megsemmisíti a referencia- és értéktípusok példányait. A rendszer megsemmisíti az értéktípusok példányait, amint az azokat tartalmazó környezet megsemmisül. A szemétgyűjtő az utolsó hivatkozás eltávolítása után néhány meghatározatlan időpontban megsemmisíti a referenciatípusok példányait.
A nem felügyelt erőforrásokat( például fájlkezelőt) tartalmazó típuspéldányok esetében determinisztikus tisztítást kell alkalmazni annak érdekében, hogy az 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.