Esporta (0) Stampa
Espandi tutto

Operatore new (Riferimenti per C#)

Aggiornamento: novembre 2007

Utilizzato per creare oggetti e richiamare costruttori. 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. 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 la classe 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.

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, "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
*/


Si noti che nell'esempio il valore predefinito di una stringa è null e, pertanto, non viene visualizzato.

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 7.5.10 Operatore new

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft