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 werden auf einem Stapel erstellt, während Verweistypobjekte auf einem Heap erstellt werden.Value-type objects such as structs are created on the stack, while reference-type objects such as classes are created on the heap. Beide Objekttypen werden automatisch zerstört. Allerdings werden auf Werttypen basierende Objekte zerstört, wenn sie den gültigen Bereich verlassen. Auf Verweistypen basierende Objekte hingegen werden zu einem unbestimmten Zeitpunkt zerstört, nachdem der letzte Verweis auf sie entfernt wurde.Both types of objects are destroyed automatically, but objects based on value types are destroyed when they go out of scope, whereas objects based on reference types are destroyed at an unspecified time after the last reference to them is removed. Für Verweistypen, die feste Ressourcen wie große Mengen an Speicher, Dateihandles oder Netzwerkverbindungen verbrauchen, ist es manchmal wünschenswert, einen deterministischen Abschluss zu nutzen, um sicherzustellen, dass das Objekt sobald wie möglich zerstört wird.For reference types that consume fixed resources such as large amounts of memory, file handles, or network connections, it is sometimes desirable to employ deterministic finalization to ensure that the object is destroyed 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#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
OperatorschlüsselwörterOperator Keywords
newnew
Anonyme TypenAnonymous Types