Freigeben über


new-Operator (C#-Referenz)

Aktualisiert: November 2007

Wird verwendet, um Objekte zu erstellen und Konstruktoren aufzurufen. Beispiel:

Class1 obj  = new Class1();

Wird auch verwendet, um Instanzen anonymer Typen zu erstellen:

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

Der Operator new wird auch verwendet, um den Standardkonstruktor für Werttypen aufzurufen. Beispiel:

int i = new int();

In der vorangehenden Anweisung wird i mit 0 initialisiert. Dies ist der Standardwert für den int-Typ. Diese Anweisung wirkt sich genauso aus wie die folgende:

int i = 0;

Die vollständige Liste der Standardwerte finden Sie unter Tabelle für Standardwerte (C#-Referenz).

Für eine Struktur darf kein Standardkonstruktor deklariert werden, weil jeder Werttyp implizit einen öffentlichen Standardkonstruktor besitzt. Um die Anfangswerte eines Strukturtyps festzulegen, können Sie parametrisierte Konstruktoren deklarieren. Dies ist jedoch nur erforderlich, wenn andere Werte als die Standardwerte benötigt werden.

Werttypobjekte wie Strukturen werden auf dem Stapel erstellt, während Referenztypobjekte, z. B. Klassen, auf dem Heap erstellt werden. Beide Objekttypen werden automatisch zerstört, aber auf Werttypen basierende Objekte werden zerstört, wenn sie außerhalb des gültigen Wertebereichs liegen, während auf Referenztypen basierende Objekte nach einiger Zeit zerstört werden, wenn der letzte Verweis auf sie entfernt wurde. Für Referenztypen, die feste Ressourcen wie große Mengen an Speicher, Dateihandles oder Netzwerkverbindungen beanspruchen, bietet es sich manchmal an, mit einem deterministischen Abschluss sicherzustellen, dass das Objekt so bald wie möglich zerstört wird. Weitere Informationen hierzu finden Sie unter using-Anweisung (C#-Referenz).

Der Operator new kann nicht überladen werden.

Falls der Operator new keinen Speicher reservieren kann, wird die OutOfMemoryException-Ausnahme ausgelöst.

Beispiel

Im folgenden Beispiel werden mit dem Operator new ein struct-Objekt und ein Klassenobjekt erstellt und initialisiert, und dann werden ihnen Werte zugewiesen. Die Standardwerte und die zugewiesenen Werte werden angezeigt.

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, "Luciana Ramos");

      // 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: Luciana Ramos, 1234
*/

Beachten Sie bei dem Beispiel, dass es sich bei dem Standardwert einer Zeichenfolge um null handelt. Aus diesem Grund wird er nicht angezeigt.

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 7.5.10 Der Operator "new"

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

C#-Schlüsselwörter

Operatorschlüsselwörter (C#-Referenz)

new (C#-Referenz)

Anonyme Typen (C#-Programmierhandbuch)

Weitere Ressourcen

C#-Referenz