Compartir a través de


Diseño de enumeraciones

Actualización: noviembre 2007

Las enumeraciones proporcionan conjuntos de valores constantes que son útiles para la definición inflexible de tipos de miembros y mejorar la legibilidad del código. Las enumeraciones pueden ser de tipo simple o de tipo indicadores (flags). Las enumeraciones Simple contienen valores que no se combinan ni utilizan en comparaciones bit a bit. Las enumeraciones de indicadores están pensadas para combinarse utilizando operaciones OR bit a bit. Las combinaciones de valores de enumeración de indicadores se examinan utilizando operaciones AND bit a bit.

Las instrucciones siguientes describen los procedimientos recomendados para el diseño de enumeraciones.

Es conveniente utilizar una enumeración en lugar de constantes estáticas.

El ejemplo de código siguiente muestra un diseño incorrecto.

Public Class BadFurnishings

    Public Shared Table As Integer = 1
    Public Shared Chair As Integer = 2
    Public Shared Lamp As Integer = 3

End Class
public static class BadFurnishings
{
    public static int Table = 1;
    public static int Chair = 2;
    public static int Lamp = 3;
}

El ejemplo de código siguiente muestra la enumeración que se debería utilizar en lugar de las constantes estáticas.

Public Enum GoodFurnishings

    Table
    Chair
    Lamp

End Enum
public enum GoodFurnishings
{
    Table,
    Chair,
    Lamp
}

No utilice una enumeración para conjuntos abiertos como la versión del sistema operativo.

Agregar valores a una enumeración que ya se ha distribuido puede estropear el código existente. Hay veces en las que puede ser aceptable, pero no debería diseñar una enumeración en la que es probable que se dé este caso.

No defina valores de enumeración reservados que están pensados para su uso en el futuro.

En algunas situaciones, podría decidir que agregar valores a la enumeración distribuida merece correr el riesgo estropear el código existente. También puede definir una nueva enumeración y miembros que trabajan con sus valores.

No incluya valores de centinela en las enumeraciones.

Los valores de centinela se utilizan para identificar los límites de los valores incluidos en la enumeración. Normalmente se utiliza un valor de centinela en las comprobaciones de rango y no es un valor de datos válido. El ejemplo de código siguiente define una enumeración con un valor de centinela.

Public Enum Furniture

    Desk
    Chair
    Lamp
    Rug
    LastValue

End Enum

public enum Furniture
{
    Desk,
    Chair,
    Lamp,
    Rug,
    LastValue   // The sentinel value.
}

Proporcione un valor de cero en enumeraciones simples.

Si es posible, denomine este valor como None. Si None no es adecuado, asigne el valor de cero al valor normalmente utilizado (el valor predeterminado).

Considere la posibilidad de usar System.Int32 (el tipo de datos predeterminado en la mayoría de lenguajes de programación) como tipo de datos subyacente de una enumeración salvo que se cumpla alguna de las siguientes condiciones:

  • La enumeración es una enumeración de indicadores y tiene más de 32 indicadores o espera tener más en el futuro.

  • El tipo subyacente debe ser diferente de Int32 para facilitar la interoperabilidad con código no administrado que espere distintas enumeraciones de tamaño.

  • Un tipo subyacente de menor tamaño produciría un significativo ahorro de espacio. Si espera que una enumeración se utilice principalmente como un argumento para el flujo de control, el tamaño no plantea grandes diferencias. Los ahorros de tamaño podrían ser significativos si:

    • Prevé que la enumeración se vaya a utilizar como un campo en una estructura o clase de la que se crean instancias con mucha frecuencia.

    • Espera que los usuarios creen matrices grandes o colecciones de instancias de enumeración.

    • Prevé que se va a serializar un gran número de instancias de enumeración.

No extienda directamente System.Enum.

Algunos compiladores no permiten extender Enum a menos que lo haga utilizando indirectamente la palabra clave específica del lenguaje para generar enumeraciones.

Portions Copyright 2005 Microsoft Corporation. Reservados todos los derechos.

Portions Copyright Addison-Wesley Corporation. Reservados todos los derechos.

Para obtener más información sobre las directrices de diseño, consulte el libro titulado "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" de Krzysztof Cwalina y Brad Abrams, publicado por Addison-Wesley, 2005.

Vea también

Conceptos

Diseñar enumeraciones de indicadores

Agregar valores a enumeraciones

Otros recursos

Instrucciones de diseño de tipos

Instrucciones de diseño para desarrollar bibliotecas de clases