You are on page 1of 3

Operador New C#

Se utiliza para crear objetos e invocar constructores. Por ejemplo:


Class1 obj = new Class1();
Tambin se utiliza para crear instancias de tipos annimos:
var query = from cust in customers
select new {Name = cust.Name, Address = cust.PrimaryAddress};
El operador new tambin se utiliza para invocar el constructor predeterminado de los
tipos de valor. Por ejemplo:
int i = new int();
En la instruccin anterior se inicializa i con el valor 0, que es el predeterminado para el
tipo int. Esa instruccin tiene el mismo efecto que:
int i = 0;
Recuerde que es un error declarar un constructor predeterminado para un tipo struct,
ya que todos los tipos de valor poseen implcitamente un constructor pblico
predeterminado. Es posible declarar constructores parametrizados en un tipo struct
para establecer sus valores iniciales, pero slo es necesario si se requieren valores
distintos del predeterminado.
Los objetos de tipo valor, tales como los structs, se crean en la pila, mientras que los
objetos de tipo referencia, tales como las clases, se crean en el montn. Ambos tipos
de objetos se destruyen automticamente, pero los objetos basados en tipos de valor
se destruyen cuando salen del mbito, mientras que los objetos basados en tipos de
referencia se destruyen en un momento no especificado despus de quitar la ltima
referencia a ellos. En los tipos de referencia que consumen ciertos recursos, como
grandes cantidades de memoria, identificadores de archivo o conexiones de red, a
veces es conveniente emplear la finalizacin determinista para asegurarse de que el
objeto se destruir lo antes posible.
El operador new no se puede sobrecargar.
Si el operador new no puede asignar memoria, producir la
excepcin OutOfMemoryException.

Ejemplo
En el siguiente ejemplo, se crean e inicializan, mediante el operador new, un
objeto struct y un objeto class y, a continuacin, se les asignan valores. Se muestran
los valores predeterminados y asignados.
C#
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
*/

You might also like