Operador new (Referencia de C#)new operator (C# Reference)

Se usa para crear objetos e invocar constructores.Used to create objects and invoke constructors. Por ejemplo:For example:

Class1 obj  = new Class1();

También se usa para crear instancias de tipos anónimos:It is also used to create instances of anonymous types:

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

El operador new también se usa para invocar al constructor sin parámetros para tipos de valor.The new operator is also used to invoke the parameterless constructor for value types. Por ejemplo:For example:

int i = new int();

En la instrucción anterior, i se ha inicializado en 0, que es el valor predeterminado para el tipo int.In the preceding statement, i is initialized to 0, which is the default value for the type int. La instrucción tiene el mismo efecto que lo siguiente:The statement has the same effect as the following:

int i = 0;

Para obtener una lista completa de valores predeterminados, vea Tabla de valores predeterminados.For a complete list of default values, see Default Values Table.

Recuerde que es un error declarar un constructor sin parámetros para un struct, ya que cada tipo de valor tiene implícitamente un constructor sin parámetros público.Remember that it is an error to declare a parameterless constructor for a struct because every value type implicitly has a public parameterless constructor. Es posible declarar constructores parametrizados en un tipo struct para establecer sus valores iniciales, pero esto solo es necesario si se requieren valores distintos de los predeterminados.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.

Los objetos de tipo de valor, como las estructuras, y los objetos de tipo de referencia, como las clases, se destruyen automáticamente, pero los objetos de tipo de valor se destruyen junto al contexto que los contiene. En el caso de los objetos de tipo de referencia, los destruye el recolector de elementos no utilizados en un momento no especificado después de que se haya quitado la última referencia a ellos.Both value-type objects such as structs and reference-type objects such as classes are destroyed automatically, but value-type objects are destroyed when their containing context is destroyed, whereas reference-type objects are destroyed by the garbage collector at an unspecified time after the last reference to them is removed. Para los tipos que contienen recursos como identificadores de archivos o conexiones de red, lo recomendable es llevar a cabo una limpieza determinista para asegurarse de que los recursos que contienen se liberan tan pronto como sea posible.For types that contain resources such as file handles, or network connections, it is desirable to employ deterministic cleanup to ensure that the resources they contain are released as soon as possible. Para obtener más información, vea Instrucción using.For more information, see using Statement.

El operador new no se puede sobrecargar.The new operator cannot be overloaded.

Si el operador new no puede asignar memoria, se produce la excepción OutOfMemoryException.If the new operator fails to allocate memory, it throws the exception, OutOfMemoryException.

EjemploExample

En el ejemplo siguiente, se crean y se inicializan un objeto struct y un objeto de clase mediante el operador new y, después, se les asignan valores.In the following example, a struct object and a class object are created and initialized by using the new operator and then assigned values. Se muestran el valor predeterminado y los valores asignados.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
*/

Observe en el ejemplo que el valor predeterminado de una cadena es null.Notice in the example that the default value of a string is null. Por lo tanto, no se muestra.Therefore, it is not displayed.

Especificación del lenguaje C#C# language specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also