new-Operator (C#-Referenz)
Wird verwendet, um Objekte zu erstellen und Konstruktoren aufzurufen.Beispiele:
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.Beispiele:
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 finden Sie unter using-Anweisung (C#-Referenz).
Der Operator new kann nicht überladen werden.
Falls der Operator new keinen Speicher belegen 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, "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 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 der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.
Siehe auch
Referenz
Operatorschlüsselwörter (C#-Referenz)
Anonyme Typen (C#-Programmierhandbuch)