Saltar al contenido

Los constructores por defecto y su invocación en C#

Tomemos un ejemplo simple para demostrar los constructores. Definiremos una clase con dos constructores diferentes, lo que se llama sobrecarga.

123456789101112131415161718192021222324252627282930313233 usando System;namespace {publicclassDefaultConstructors{bool isInitialized;privateint a;privateint b;publicDefaultConstructors(){ Console.WriteLine("Constructor sin argumento."); isInitialized =true;}publicDefaultConstructors(int aa,int bb){this. a = aa;this.b = bb; Console.WriteLine($"Constructor con dos argumentos: int {aa}, e int {bb}");}publicstaticvoidMain(){DefaultConstructors a =newDefaultConstructors(); Console.WriteLine($"La instancia de {nombre de(DefaultConstructors)} se inicializa: {a.esInicializado}");DefaultConstructors b =newDefaultConstructors(10,20); Console.WriteLine($"La instancia de {nombrede(DefaultConstructors)} se inicializa con los argumentos {b.a}, y {b.b}"); Console.ReadKey();}}}

csharp

Los constructores por defecto y su invocación en C#
Los constructores por defecto y su invocación en C#

El resultado de la ejecución nos da los siguientes resultados.

1234Constructor sin argumento.La instancia de DefaultConstructors está inicializada: TrueConstructor con dos argumentos: int 10, e int 20La instancia de DefaultConstructors se inicializa con los argumentos 10, y 20

bash

Si no queremos ninguna modificación de una clase basada en los argumentos, podemos omitir completamente el constructor, ya que será generado dinámicamente por C# en tiempo de compilación.

Este código también funciona.

1234567891011121314151617 usando el sistema;namespace {publicclassDefaultConstructors{publicstaticvoidMain(){DefaultConstructors a =newDefaultConstructors(); Console.WriteLine($"La instancia de {nombre de(DefaultConstructors)} se inicializa!"); Console.ReadKey();}}

csharp

Esto produce el siguiente resultado.

1La instancia de DefaultConstructors está inicializada!

bash

Otra característica que es muy importante saber sobre los constructores por defecto es que inicializan cada campo numérico a 0 y cada cadena o campo de objeto a nulo.

Demostrémoslo con el siguiente ejemplo.

123456789101112131415161718192021 usando el Sistema;namespace {clase públicaDefaultConstructors{int a;string b;object c;publicstaticvoidMain(){DefaultConstructors a =newDefaultConstructors(); Consola. WriteLine($"La instancia de {nombre de(DefaultConstructors)} se inicializa!"); Console.WriteLine($"El valor de a: {a.a}"); Console.WriteLine($"El valor de b: {objeto.Igual(a.b,null)}"); Console.WriteLine($"El valor de c: {objeto.Igual(a.c,null)}"); Console.ReadKey();}}}

csharp

La función object.Equals() nos ayuda a comprobar si el valor es nulo de un objeto o instancia específica. La siguiente salida nos da la bienvenida después de ejecutar la aplicación.

1234¡La instancia de DefaultConstructors está inicializada! El valor de a: 0El valor de b: VerdaderoEl valor de c: True

bash

El inconveniente de utilizar constructores predeterminados es que no se tiene la opción de inicializar las instancias de manera diferente.

Hay dos tipos de constructores a su disposición: privado y público . Como regla general, recuerda que los constructores privados se utilizan sólo en las clases que contienen sólo miembros estáticos. Si sólo existe un constructor arivado para una clase, las demás clases no pueden crear nuevas instancias de ella, excepto las clases anidadas.