Operador new (referencia de C#)new operator (C# reference)

El operador new crea una nueva instancia de un tipo.The new operator creates a new instance of a type.

También puede usar la palabra clave new como un modificador de declaración de miembro o una restricción de tipo genérico.You can also use the new keyword as a member declaration modifier or a generic type constraint.

Invocación del constructorConstructor invocation

Para crear una nueva instancia de un tipo, normalmente se invoca uno de los constructores de ese tipo mediante el operador new:To create a new instance of a type, you typically invoke one of the constructors of that type using the new operator:

var dict = new Dictionary<string, int>();
dict["first"] = 10;
dict["second"] = 20;
dict["third"] = 30;

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

Puede usar un inicializador de colección u objeto con el operadornew para crear una instancia e inicializar un objeto en una sola instrucción, como se muestra en el ejemplo siguiente:You can use an object or collection initializer with the new operator to instantiate and initialize an object in one statement, as the following example shows:

var dict = new Dictionary<string, int>
{
    ["first"] = 10,
    ["second"] = 20,
    ["third"] = 30
};

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

creación de matrizArray creation

También se usa el operador new para crear una instancia de matriz, como se muestra en el ejemplo siguiente:You also use the new operator to create an array instance, as the following example shows:

var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30

Utilice la sintaxis de inicialización de matriz para crear una instancia de matriz y rellenarla con los elementos en una sola instrucción.Use array initialization syntax to create an array instance and populate it with elements in one statement. En el ejemplo siguiente se muestran varias maneras de hacerlo:The following example shows various ways how you can do that:

var a = new int[3] { 10, 20, 30 };
var b = new int[] { 10, 20, 30 };
var c = new[] { 10, 20, 30 };
Console.WriteLine(c.GetType());  // output: System.Int32[]

Para obtener más información sobre las matrices, consulte Matrices.For more information about arrays, see Arrays.

Creación de instancias de tipos anónimosInstantiation of anonymous types

Para crear una instancia de un tipo anónimo, utilice el operador new y la sintaxis de inicializador de objeto:To create an instance of an anonymous type, use the new operator and object initializer syntax:

var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!

Destrucción de instancias de tipoDestruction of type instances

No tiene que destruir instancias de tipo creadas anteriormente.You don't have to destroy earlier created type instances. Las instancias de tipos de valor y referencia se destruyen automáticamente.Instances of both reference and value types are destroyed automatically. Las instancias de tipos de valor se destruyen en cuanto se destruye el contexto que las contiene.Instances of value types are destroyed as soon as the context that contains them is destroyed. Las instancias de tipos de referencia las destruye el recolector de elementos no utilizados en un momento no especificado después de eliminarse la última referencia a ellas.Instances of reference types are destroyed by the garbage collector at unspecified time after the last reference to them is removed.

Para los tipos que contienen recursos no administrados, como un identificador de archivo, 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 unmanaged resources, for example, a file handle, it's recommended to employ deterministic clean-up to ensure that the resources they contain are released as soon as possible. Para más información, vea la referencia de la API System.IDisposable y el artículo sobre la instrucción using.For more information, see the System.IDisposable API reference and the using statement article.

Posibilidad de sobrecarga del operadorOperator overloadability

Un tipo definido por el usuario no puede sobrecargar el operador new.A user-defined type cannot overload the new operator.

Especificación del lenguaje C#C# language specification

Para más información, vea la sección El operador new de la Especificación del lenguaje C#.For more information, see The new operator section of the C# language specification.

Vea tambiénSee also