Saltar al contenido

La construcción comienza

Si no proporciona ningún constructor para su clase o estructura, C# va a crear uno por defecto. Esto, a su vez, instanciará el objeto y establecerá las variables miembros a los valores por defecto basados en sus tipos de datos. En la Tabla de Valores por Defecto encontrará la lista de valores por defecto basados en los tipos con los que trabaja C#. Si no se proporciona el constructor, C# se basará en un constructor implícito, sin parámetros, para inicializar automáticamente cada campo de un tipo de valor a los valores por defecto, basándose en la tabla anterior.

Los constructores son métodos especiales donde el nombre es el mismo que su tipo. Para hablar más profesionalmente, la firma del método sólo consiste en el nombre del método y su lista de parámetros, y no incluye un tipo de devolución. Este es un ejemplo de ello:

La construcción comienza
La construcción comienza
1234567891011public classProgrammingLanguage{privatestring name;privatedouble version;publicProgrammingLanguage(string languageName,double languageVersion){ name = languageName; version = languageVersion;}}

csharp

Hay dos maneras de implementar un constructor. Una es una declaración de una sola línea, como el ejemplo de abajo, y la otra es el ejemplo más hablador de arriba. Ambos tienen sus ventajas y desventajas. Exploremos la declaración simple similar, también conocida como definición del cuerpo de la expresión .

123456789101112clase públicaLenguaje{lenguaje de cadena privadaNombre;publicLenguaje(nombre de cadena)=> Nombre = nombre;nombre de cadena pública {get={{i}; lenguajeNombre;set={i}; lenguajeNombre =valor;}}

csharp

Esta definición de la expresión asigna el argumento al languageName .

Constructores de estática

Los ejemplos anteriores fueron constructores de instancia que crearon un nuevo objeto. Las clases y estructuras también pueden tener constructores estáticos que inicializan miembros estáticos de un tipo específico. Normalmente no tienen parámetros. Si no se proporciona un constructor estático para inicializar los campos estáticos, el compilador de C# lo reconoce y estos campos se inicializan con sus valores por defecto basados en la tabla de valores por defecto . Veamos un ejemplo de ello.

Los constructores estáticos se utilizan para inicializar cualquier dato estático o simplemente para realizar una acción/cálculo que debe realizarse una vez. Se llama automágicamente antes de crear la primera instancia o de referenciar cualquier miembro estático.

12345678910111213clase públicaPython:Idioma{privadoestáticodoble mínimoVersión;públicoPython(creador de la cadena,tipo de lenguaje de la cadena):base(creador, tipo de lenguaje){} {}estáticoPython(){ mínimoVersión =3.8;}}

csharp

Este otro ejemplo utiliza la definición de cuerpo de expresión para lograr lo mismo.

123456789clase públicaRuby:Lenguaje{privadoestáticodoble mínimoVersión;públicoRuby(creador de la cadena,lenguaje de la cadenaTipo):base(creador, lenguajeTipo){}estáticoRuby()=> mínimoVersión =18;}

csharp

Uso típico:

  1. Usar la clase Logger cuando una clase usa algún archivo para escribir registros o datos.
  2. Usa la clase Wrapper para el código no administrado.
  3. Hacer que se comprueben los parámetros en tiempo de ejecución que no se pueden comprobar mediante las restricciones en tiempo de compilación.

Constructores de instancias

Estos tipos de constructor se utilizan cuando se inicializa cualquier variable miembro de la instancia utilizando la nueva expresión para crear un objeto de una clase. Es importante, para inicializar una clase estática o una variable estática en una clase no estática, que definas un constructor estático.

He aquí un ejemplo de un constructor de instancias que se llama sin parámetros .

1234567891011classVillageCoordinates{publicdouble lat, lng;// constructorpublicVillageCoordinates(){ lat =0; lng =0;}}

csharp

Si está usando campos públicos, debe ser consciente de que no es realmente recomendable. Los campos públicos permiten a cualquier método en cualquier parte del programa – sin restricciones y sin verificar el acceso al funcionamiento interno de los objetos dados. Por lo general, estos miembros deben ser privados y sólo se debe acceder a ellos a través de las propiedades y métodos de la clase.

Añadamos otro constructor que requiere dos argumentos.

12345publicVillageCoordinates(double lat,double lng){this.lat = lat;this.lng = lng;}

csharp

El constructor de la instancia se llama siempre que se crea un objeto basado en la clase VillageCoordinates . A menudo es útil proporcionar diferentes tipos de constructores a medida que su aplicación madura para facilitar la creación de nuevos objetos.

Ahora puedes crear pueblos con valores iniciales predeterminados o específicos.

12Aldea de las coordenadas del pueblo1 =nuevas coordenadas del pueblo();Aldea de las coordenadas del pueblo2 =nuevas coordenadas del pueblo(10.4,20.2);

csharp

Constructor privado

Este es un tipo especial de constructor de instancias. La principal instancia de uso es cuando sus clases sólo tienen miembros estáticos. Si una clase tiene uno o más constructores privados y ningún constructor público, las otras clases no pueden crear instancias de esta clase; excepto las clases anidadas dentro de esta clase.

Por ejemplo:

12345classVehicle{privateVehicle(){}publicstaticint ruedas =4;}

csharp

Si declaras un constructor vacío, el compilador de C# no generará dinámicamente un constructor sin parámetros. Si no se utiliza un modificador de acceso con el constructor, también se convertirá en un constructor privado por defecto. El uso de las palabras clave private lo hace obvio para los desarrolladores al indicar explícitamente el tipo.

Los constructores privados son muy similares en cuanto a cómo funciona la clase de Matemáticas . Evita la creación de instancias cuando no hay un campo o método de instancia, o cuando se llama a un método para obtener una instancia de una clase.