Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
nowy operator —
Operator new
tworzy nowe wystąpienie typu. Możesz również użyć słowa kluczowego new
jako modyfikatora deklaracji składowej lub ograniczenia typu ogólnego.
Wywołanie konstruktora
Aby utworzyć nowe wystąpienie typu, zazwyczaj wywołujesz jeden z konstruktorów tego typu przy użyciu new
operatora :
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
Możesz użyć inicjatora obiektu lub kolekcji z operatoremnew
, aby utworzyć wystąpienie i zainicjować obiekt w jednej instrukcji, jak pokazano w poniższym przykładzie:
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 docelowy new
Wyrażenia wywołania konstruktora są typizowane przez obiekt docelowy. Oznacza to, że jeśli znany jest typ docelowy wyrażenia, można pominąć nazwę typu, jak pokazano w poniższym przykładzie:
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 pokazano w poprzednim przykładzie, zawsze należy używać nawiasów w wyrażeniu typu new
docelowego.
Jeśli typ docelowy new
wyrażenia jest nieznany (na przykład w przypadku używania var
słowa kluczowego), musisz określić nazwę typu.
Tworzenie tablicy
Operator służy new
również do tworzenia wystąpienia tablicy, jak pokazano w poniższym przykładzie:
var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30
Użyj składni inicjowania tablicy, aby utworzyć wystąpienie tablicy i wypełnić je elementami w jednej instrukcji. W poniższym przykładzie przedstawiono różne sposoby, w jaki można to zrobić:
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[]
Aby uzyskać więcej informacji na temat tablic, zobacz Tablice.
Tworzenie wystąpień typów anonimowych
Aby utworzyć wystąpienie typu anonimowego, użyj new
operatora i składni inicjatora obiektów:
var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!
Niszczenie wystąpień typu
Nie trzeba niszczyć wcześniej utworzonych wystąpień typu. Wystąpienia typów odwołań i wartości są niszczone automatycznie. Wystąpienia typów wartości są niszczone natychmiast po zniszczeniu kontekstu zawierającego je. Wystąpienia typów odwołań są niszczone przez moduł odśmiecający śmieci w nieokreślonym czasie po usunięciu ostatniego odwołania do nich.
W przypadku wystąpień typów, które zawierają zasoby niezarządzane, na przykład dojście do plików, zaleca się zastosowanie deterministycznego czyszczenia w celu zapewnienia, że zasoby, które zawierają, są zwalniane tak szybko, jak to możliwe. Aby uzyskać więcej informacji, zobacz dokumentację interfejsu System.IDisposable API i artykuł z instrukcjąusing
.
Przeciążenie operatora
Typ zdefiniowany przez użytkownika nie może przeciążyć new
operatora.
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję nowy operator specyfikacji języka C#.
Aby uzyskać więcej informacji na temat wyrażenia typu new
docelowego, zobacz notatkę dotyczącą propozycji funkcji.