Compartir a través de


Diseño de constructores

Nota:

Este contenido se reimprime con permiso de Pearson Education, Inc. de Directrices de diseño de frameworks: Convenciones, expresiones y patrones para bibliotecas reutilizables de .NET, 2ª edición. Esa edición fue publicada en 2008, y el libro ha sido totalmente revisado en la tercera edición. Parte de la información de esta página puede estar obsoleta.

Hay dos tipos de constructores: constructores de tipo y constructores de instancia.

Los constructores de tipo son estáticos y los ejecuta CLR antes de usar el tipo. Los constructores de instancia se ejecutan cuando se crea una instancia de un tipo.

Los constructores de tipo no pueden tomar ningún parámetro. pero los constructores de instancias sí que pueden hacerlo. Los constructores de instancia que no toman ningún parámetro suelen denominarse constructores sin parámetros.

Los constructores son la manera más natural de crear instancias de un tipo. La mayoría de los desarrolladores buscarán e intentarán usar un constructor antes de considerar formas alternativas de crear instancias (como los métodos de fábrica).

✔️ CONSIDERE la posibilidad de proporcionar constructores sencillos, idealmente predeterminados.

Un constructor simple tiene un número muy pequeño de parámetros y todos los parámetros son primitivos o enumeraciones. Estos constructores simples aumentan la facilidad de uso del marco.

✔️ CONSIDERE usar un método de fábrica estático en lugar de un constructor si la semántica de la operación deseada no se corresponde directamente con la construcción de una nueva instancia, o si seguir las pautas de diseño del constructor resulta antinatural.

✔️ Use parámetros de constructor como accesos directos para establecer las propiedades principales.

No debe haber ninguna diferencia en la semántica entre usar el constructor vacío seguido de algunos conjuntos de propiedades y usar un constructor con varios argumentos.

✔️ Use el mismo nombre para los parámetros del constructor y una propiedad si los parámetros del constructor se utilizan simplemente para establecer la propiedad.

La única diferencia entre estos parámetros y las propiedades debe ser el uso de mayúsculas y minúsculas.

✔️ Realice un trabajo mínimo en el constructor.

Los constructores no deben realizar mucho trabajo aparte de capturar los parámetros del constructor. El costo de cualquier otro procesamiento debe retrasarse hasta que sea necesario.

✔️ Genere excepciones desde constructores de instancias, si es necesario.

✔️ DECLARA explícitamente el constructor público sin parámetros en las clases, si se requiere.

Si no declara explícitamente ningún constructor en un tipo, muchos lenguajes (como C#) agregarán automáticamente un constructor sin parámetros público. (Las clases abstractas obtienen un constructor protegido).

Agregar un constructor con parámetros a una clase impide que el compilador agregue el constructor sin parámetros. Esto suele provocar cambios importantes de forma accidental.

❌ EVITE definir explícitamente constructores sin parámetros en estructuras.

Esto hace que la creación de matrices sea más rápida, ya que si el constructor sin parámetros no está definido, no tiene que ejecutarse en cada ranura de la matriz. Tenga en cuenta que muchos compiladores, incluido C#, no permiten que las estructuras tengan constructores sin parámetros por este motivo.

❌ EVITE llamar a miembros virtuales en un objeto dentro de su constructor.

Al llamar a un miembro virtual, se provocará que se llame a la invalidación más derivada, incluso si el constructor del tipo más derivado aún no se ha ejecutado completamente.

Instrucciones de constructores de tipo

✔️ Haga que los constructores estáticos sean privados.

Un constructor estático, también denominado constructor de clase, se usa para inicializar un tipo. CLR llama al constructor estático antes de que se cree la primera instancia del tipo o se llame a cualquier miembro estático de ese tipo. El usuario no tiene control sobre cuándo se llama al constructor estático. Si un constructor estático no es privado, se puede llamar mediante código distinto de CLR. En función de las operaciones realizadas en el constructor, esto puede provocar un comportamiento inesperado. El compilador de C# obliga a que los constructores estáticos sean privados.

❌ NO arroje excepciones desde constructores estáticos.

Si se produce una excepción desde un constructor de tipo, el tipo no se puede usar en el dominio de aplicación actual.

✔️ CONSIDERE la posibilidad de inicializar campos estáticos insertados en lugar de usar explícitamente constructores estáticos, ya que el tiempo de ejecución puede optimizar el rendimiento de los tipos que no tienen un constructor estático definido explícitamente.

© Partes 2005, 2009 de Microsoft Corporation. Todos los derechos reservados.

Reimpreso con permiso de Pearson Education, Inc. de Framework Design Guidelines: Convenciones, Idiomas y Patrones para Bibliotecas .NET Reusables, 2ª Edición por Krzysztof Cwalina y Brad Abrams, publicado el 22 de octubre de 2008 por Addison-Wesley Professional como parte de la Serie Desarrollo de Microsoft Windows.

Consulte también