new-Operator (C#-Referenz)new operator (C# Reference)

Wird zum Erstellen von Objekten und zum Aufrufen von Konstruktoren verwendet.Used to create objects and invoke constructors. Zum Beispiel:For example:

Class1 obj  = new Class1();

Er wird auch verwendet, um Instanzen von anonymen Typen zu erstellen:It is also used to create instances of anonymous types:

var query = from cust in customers
            select new { Name = cust.Name, Address = cust.PrimaryAddress };

Der new-Operator wird auch verwendet, um den Standardkonstruktor für Werttypen aufzurufen.The new operator is also used to invoke the default constructor for value types. Zum Beispiel:For example:

int i = new int();

In der vorherigen Anweisung wird i auf 0 initialisiert, dem Standardwert für den int-Typ.In the preceding statement, i is initialized to 0, which is the default value for the type int. Die Anweisung hat den gleichen Effekt wie die Folgende:The statement has the same effect as the following:

int i = 0;

Eine vollständige Liste der Standardwerte finden Sie in der Tabelle für Standardwerte.For a complete list of default values, see Default Values Table.

Beachten Sie, dass das Deklarieren eines Standardkonstruktors für eine Struktur ein Fehler ist, da jeder Werttyp implizit einen öffentlichen Standardkonstruktor besitzt.Remember that it is an error to declare a default constructor for a struct because every value type implicitly has a public default constructor. Es ist möglich, parametrisierte Konstruktoren auf einem Strukturtyp zu deklarieren, um seine Standardwerte festzulegen. Dies ist aber nur notwendig, wenn andere Werte als der Standardwert erforderlich sind.It is possible to declare parameterized constructors on a struct type to set its initial values, but this is only necessary if values other than the default are required.

Werttypobjekte wie Strukturen und Verweistypobjekte wie Klassen werden automatisch zerstört. Werttypobjekte werden jedoch zerstört, wenn der sie enthaltende Kontext zerstört wird, während Verweistypobjekte zu einem unbestimmten Zeitpunkt nach dem Entfernen der letzten Verweise auf diese Dateien durch die Garbage Collection zerstört werden.Both value-type objects such as structs and reference-type objects such as classes are destroyed automatically, but value-type objects are destroyed when their containing context is destroyed, whereas reference-type objects are destroyed by the garbage collector at an unspecified time after the last reference to them is removed. Bei Typen, die Ressourcen wie Dateihandles oder Netzwerkverbindungen enthalten, ist eine deterministische Bereinigung empfehlenswert, um sicherzustellen, dass die darin enthaltenen Ressourcen so bald wie möglich freigegeben werden.For types that contain resources such as file handles, or network connections, it is desirable to employ deterministic cleanup to ensure that the resources they contain are released as soon as possible. Weitere Informationen finden Sie unter using-Anweisung.For more information, see using Statement.

Operator new kann nicht überladen werden.The new operator cannot be overloaded.

Wenn der new-Operator bei der Zuweisung von Arbeitsspeicher scheitert, löst er die Ausnahme OutOfMemoryException aus.If the new operator fails to allocate memory, it throws the exception, OutOfMemoryException.

BeispielExample

Im folgenden Beispiel werden ein struct-Objekt und ein Klassenobjekt mithilfe des new-Operators erstellt und initialisiert. Anschließend werden ihnen Werte zugewiesen.In the following example, a struct object and a class object are created and initialized by using the new operator and then assigned values. Die Standardwerte und die zugewiesenen Werte werden angezeigt.The default and the assigned values are displayed.

struct SampleStruct
{
   public int x;
   public int y;

   public SampleStruct(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}

class SampleClass
{
   public string name;
   public int id;

   public SampleClass() {}

   public SampleClass(int id, string name)
   {
      this.id = id;
      this.name = name;
   }
}

class ProgramClass
{
   static void Main()
   {
      // Create objects using default constructors:
      SampleStruct Location1 = new SampleStruct();
      SampleClass Employee1 = new SampleClass();

      // Display values:
      Console.WriteLine("Default values:");
      Console.WriteLine("   Struct members: {0}, {1}",
             Location1.x, Location1.y);
      Console.WriteLine("   Class members: {0}, {1}",
             Employee1.name, Employee1.id);

      // Create objects using parameterized constructors:
      SampleStruct Location2 = new SampleStruct(10, 20);
      SampleClass Employee2 = new SampleClass(1234, "Cristina Potra");

      // Display values:
      Console.WriteLine("Assigned values:");
      Console.WriteLine("   Struct members: {0}, {1}",
             Location2.x, Location2.y);
      Console.WriteLine("   Class members: {0}, {1}",
             Employee2.name, Employee2.id);
   }
}
/*
Output:
Default values:
   Struct members: 0, 0
   Class members: , 0
Assigned values:
   Struct members: 10, 20
   Class members: Cristina Potra, 1234
*/

Beachten Sie im Beispiel, dass der Standardwert einer Zeichenfolge null ist.Notice in the example that the default value of a string is null. Daher wird er nicht angezeigt.Therefore, it is not displayed.

C#-SprachspezifikationC# language specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation.For more information, see the C# Language Specification. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.The language specification is the definitive source for C# syntax and usage.

Siehe auchSee also