Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
nieuwe operator: de
De new operator maakt een nieuw exemplaar van een type. U kunt het new trefwoord ook gebruiken als wijzigingsfunctievoor liddeclaraties of een algemene typebeperking.
De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.
De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.
Aanbeveling
Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.
Aanroep van constructor
Als u een nieuw exemplaar van een type wilt maken, roept u een van de constructors van dat type aan met behulp van de new operator:
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
U kunt een object- of verzamelingsinitialiseerde functie met de new operator gebruiken om een object in één instructie te instantiëren en initialiseren, zoals in het volgende voorbeeld wordt weergegeven:
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
Doel getypt new
Expressies voor aanroep van constructor zijn doelgetypeerd. Als een doeltype van een expressie bekend is, kunt u een typenaam weglaten, zoals in het volgende voorbeeld wordt weergegeven:
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 }
};
Zoals in het voorgaande voorbeeld wordt weergegeven, gebruikt u altijd haakjes in een doelexpressie die is getypt new .
Als een doeltype van een new expressie onbekend is (bijvoorbeeld wanneer u het var trefwoord gebruikt), moet u een typenaam opgeven.
Matrix maken
U gebruikt ook de new operator om een matrixexemplaren te maken, zoals in het volgende voorbeeld wordt weergegeven:
var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30
Gebruik de syntaxis van de matrixinitialisatie om een matrixexemplaren te maken en deze te vullen met elementen in één instructie. In het volgende voorbeeld ziet u verschillende manieren waarop u dit kunt doen:
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[]
Zie Matrices voor meer informatie over matrices.
Instantiëring van anonieme typen
Als u een exemplaar van een anoniem type wilt maken, gebruikt u de syntaxis van de new operator en de object-initialisatiefunctie:
var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!
Vernietiging van type exemplaren
U hoeft eerder gemaakte typeexemplaren niet te vernietigen. Het systeem vernietigt automatisch exemplaren van zowel referentie- als waardetypen. Het systeem vernietigt exemplaren van waardetypen zodra de context die deze bevat, wordt vernietigd. De garbagecollector vernietigt exemplaren van verwijzingstypen op een niet-opgegeven tijdstip nadat de laatste verwijzing ernaar is verwijderd.
Voor typeexemplaren die niet-beheerde resources bevatten, zoals een bestandsingang, maakt u gebruik van deterministische opschoning om ervoor te zorgen dat de resources zo snel mogelijk worden vrijgegeven. Zie de System.IDisposable API-verwijzing en het using instructieartikel voor meer informatie.
Overbelasting van operatoren
Een door de gebruiker gedefinieerd type kan de new operator niet overbelasten.
C#-taalspecificatie
Zie de nieuwe operatorsectie van de C#-taalspecificatie voor meer informatie.
Zie de notitienewfunctievoorstel voor meer informatie over een doelexpressie.