New — OperatorC# (odwołanie)new operator (C# reference)

Operator new tworzy nowe wystąpienie typu.The new operator creates a new instance of a type.

Można również użyć słowa kluczowego new jako modyfikatora deklaracji składowej lub ograniczenia typu ogólnego.You can also use the new keyword as a member declaration modifier or a generic type constraint.

Wywołanie konstruktoraConstructor invocation

Aby utworzyć nowe wystąpienie typu, zazwyczaj wywoływany jest jeden z konstruktorów tego typu przy użyciu operatora new:To create a new instance of a type, you typically invoke one of the constructors of that type using the 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

Można użyć inicjatora obiektu lub kolekcji z operatorem new, aby utworzyć wystąpienie obiektu i zainicjować go w jednej instrukcji, jak pokazano w poniższym przykładzie:You can use an object or collection initializer with the new operator to instantiate and initialize an object in one statement, as the following example shows:

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

Tworzenie tablicyArray creation

Możesz również użyć operatora new, aby utworzyć wystąpienie tablicy, jak pokazano w poniższym przykładzie:You also use the new operator to create an array instance, as the following example shows:

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.Use array initialization syntax to create an array instance and populate it with elements in one statement. W poniższym przykładzie pokazano różne sposoby wykonywania następujących czynności:The following example shows various ways how you can do that:

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.For more information about arrays, see Arrays.

Tworzenie wystąpienia typów anonimowychInstantiation of anonymous types

Aby utworzyć wystąpienie typu anonimowego, użyj składni operatora new i inicjatora obiektów:To create an instance of an anonymous type, use the new operator and object initializer syntax:

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

Niszczenie wystąpień typuDestruction of type instances

Nie trzeba zniszczyć wcześniej utworzonych wystąpień typu.You don't have to destroy earlier created type instances. Wystąpienia obu typów odwołań i wartości są niszczone automatycznie.Instances of both reference and value types are destroyed automatically. Wystąpienia typów wartości są niszczone, gdy tylko kontekst, który zawiera te elementy, zostanie zniszczony.Instances of value types are destroyed as soon as the context that contains them is destroyed. Wystąpienia typów odwołań są niszczone przez Moduł wyrzucania elementów bezużytecznych w nieokreślonym czasie po usunięciu ostatniego odwołania do nich.Instances of reference types are destroyed by the garbage collector at unspecified time after the last reference to them is removed.

Dla wystąpień typu, które zawierają niezarządzane zasoby, na przykład dojście do pliku, zaleca się zapełnienie deterministycznym czyszczeniem, aby upewnić się, że zasoby, które zawierają, są wystawione tak szybko, jak to możliwe.For type instances that contain unmanaged resources, for example, a file handle, it's recommended to employ deterministic clean-up to ensure that the resources they contain are released as soon as possible. Aby uzyskać więcej informacji, zobacz Dokumentacja interfejsu API System.IDisposable i artykuł using instrukcji .For more information, see the System.IDisposable API reference and the using statement article.

Przeciążanie operatoraOperator overloadability

Typ zdefiniowany przez użytkownika nie może przeciążać operatora new.A user-defined type cannot overload the new operator.

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz sekcję New Operator w C# specyfikacji języka.For more information, see The new operator section of the C# language specification.

Zobacz takżeSee also