Operatore new (Riferimenti per C#)
Utilizzata per creare oggetti e richiamare costruttori. Di seguito è riportato un esempio.
Class1 obj = new Class1();
Viene utilizzato anche per creare istanze di tipi anonimi:
var query = from cust in customers
select new {Name = cust.Name, Address = cust.PrimaryAddress};
L'operatore new viene inoltre utilizzato per richiamare il costruttore predefinito per i tipi di valore. Di seguito è riportato un esempio.
int i = new int();
Nell'istruzione precedente i viene inizializzato su 0, ovvero il valore predefinito per il tipo int. L'istruzione ha lo stesso effetto dell'istruzione riportata di seguito:
int i = 0;
Per un elenco completo dei valori predefiniti, vedere Tabella dei valori predefiniti (Riferimenti per C#).
È utile ricordare che è errato dichiarare un costruttore predefinito per una struttura, in quanto ogni tipo di valore ha implicitamente un costruttore predefinito pubblico. È possibile dichiarare costruttori con parametri su un tipo struttura per impostarne i valori iniziali, ma questa operazione è necessaria solo se sono richiesti valori diversi da quello predefinito.
I tipi di oggetto che rappresentano un valore, ad esempio strutture, vengono creati nello stack, mentre i tipi di oggetto che rappresentano un riferimento, ad esempio le classi, vengono creati nell'heap. Entrambi i tipi di oggetti vengono eliminati automaticamente, ma gli oggetti basati su tipi di valori vengono eliminati quando escono dall'ambito di validità, mentre quelli basati su tipi di riferimento in un momento non specificato dopo che è stato rimosso l'ultimo riferimento ad essi. Per i tipi di riferimento che utilizzano risorse fisse, quali grandi quantità di memoria, handle di file o connessioni di rete, può risultare preferibile adottare la finalizzazione deterministica per assicurarsi che l'oggetto venga distrutto prima possibile. Per ulteriori informazioni, vedere Istruzione using (Riferimenti per C#).
Non è possibile sottoporre l'operatore new a overload.
Se l'operatore new non riesce ad allocare memoria, genererà l'eccezione OutOfMemoryException.
Esempio
Nell'esempio riportato di seguito vengono creati e inizializzati un oggetto struct e un oggetto classe tramite l'operatore new, quindi vengono assegnati loro i valori. Vengono visualizzati sia i valori predefiniti sia quelli assegnati.
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
*/
Si noti che nell'esempio il valore predefinito di una stringa è null e, pertanto, non viene visualizzato.
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.
Vedere anche
Riferimenti
Parole chiave per operatori (Riferimenti per C#)
Tipi anonimi (Guida per programmatori C#)