He encontrado que en general existe un único tipo o espacio que ocupa en particular de la enumeración como parámetro y como resultado siempre he definido a los enums allí. Recientemente, sin embargo, yo tenía un compañero de trabajo que hacer una gran cosa acerca de la forma que fue una cosa estúpida de hacer, y usted siempre debe tener una enumeración de nombres en el directorio raíz de tu proyecto, donde se definen cada uno de sus tipos enum.

Donde es el mejor lugar para localizar tipos enum?

  • Nada de «mejores prácticas» relacionadas con el siempre va a ser subjetiva, pero creo que su compañero de trabajo que está mal. El .NET framework no se incluyen las Enumeraciones de nombres, y por una buena razón. Poner las enumeraciones en el espacio de nombres donde la mayoría lógicamente pertenecen. (Y si es apropiado, sí, nido de ellos en una clase.)
  • Hasta que su colega explicó su problema, «estúpido» no es realmente una métrica que puede actuar.
  • Dicho así, el compañero de trabajo que está mal. Si la solución tiene muchos proyectos y las enumeraciones son usados en múltiples proyectos, tiene sentido, para tener todo en un solo lugar.
InformationsquelleAutor aceinthehole | 2008-10-17

10 Comentarios

  1. 43

    ¿Por qué tratar las enumeraciones de manera diferente a otros tipos? Mantenerlos en el mismo espacio de nombres que ellos son susceptibles de ser utilizados – y suponiendo que van a ser utilizados por otras clases, hacer de ellos de nivel superior de tipos en sus propios archivos.

    El único tipo de tipo que me hacer comúnmente se agrupan está delegados – a veces tengo Delegados.cs archivo con un grupo de delegados. Menos con los .NET 3.5 y Func/Acción, la mente de usted.

  2. 8

    También, espacios de nombres para la separación de las cosas que pertenecen a un conjunto lógicamente. No todas las clases pertenecen al mismo espacio de nombres, sólo porque son clases. Asimismo, no todas las enumeraciones pertenecen al mismo espacio de nombres, sólo porque son las enumeraciones. Ponerlos con el código que lógicamente pertenecen.

  3. 4

    Normalmente intento poner todo mi distintos tipos (clases, interfaces y enumeraciones) en sus propios archivos, independientemente de lo pequeño que son. Sólo hace que sea mucho más fácil encontrar y gestionar el archivo en el que estamos, sobre todo si no pasar a ser en Visual Studio y tener la opción de «ir a la definición de» función disponible. He encontrado que casi cada vez que me he puesto un «simple» tipo como que en otra clase, que terminan ya sea añadiendo más tarde, o reutilizar de una manera que no tiene sentido a no tener su propio archivo.

    Medida de lo que el espacio de nombres, es realmente depende del diseño de lo que estamos desarrollando. En general, trato de imitar el .NET framework de la convención.

  4. 4

    Yo trato de poner todo lo relacionado con una clase en la clase. Que incluye no sólo las enumeraciones, pero también constantes. No quiero ir a buscar en otra parte para el archivo o en la clase que contiene el enumeraciones. En una aplicación de gran tamaño con un montón de clases y carpetas, esto no siempre sea obvio dónde poner la enumeración de archivos por lo que sería fácil de encontrar.

    Si la enumeración si se utiliza en varios estrechamente relacionadas con las clases, se podría crear una clase base para que los tipos comunes como las enumeraciones son compartidos allí.

    Por supuesto, si un enum es muy genérico y ampliamente utilizado, es posible que desee crear una clase separada para ellos, junto con otros genéricos utilidades.

  5. 4

    Creo que poner las Enumeraciones y las Constantes en la clase que consume o que se utiliza para el código de control de las decisiones de la mayoría y el uso de la finalización de código para encontrarlos. De esa manera usted no tiene que recordar dónde están, que están asociados con la clase. Así, por ejemplo, si tengo un ColoredBox clase entonces no tengo que pensar acerca de dónde están. Ellos formarían parte de ColoredBox. ColoredBox.Colores.Rojo, ColoredBox.Colores.Azul etc. Yo
    Creo que de la enumeración y constante como la propiedad o la descripción de esa clase.
    Si que es usado por varias clases y nadie de la clase reina, a continuación, es conveniente tener una clase enum o constantes de la clase.
    Esto sigue las reglas de la encapsulación. Aislar las propiedades de clases diferentes. ¿Qué pasa si usted decide cambiar el RGB de color Rojo en el Circulo de los objetos, sino
    usted no quiere cambiar el rojo por ColoredBox objetos? La encapsulación de sus propiedades permite esto.

  6. 2

    Qué entorno?

    En .NET por lo general crear una clase vacía archivo, cambie el nombre a MyEnum o lo que sea para indicar que tiene mi enum y sólo declarar allí.

    • .NET, pero creo que el mismo sería cierto en C++.
  7. 2

    Si mi enumeración tiene alguna posibilidad de ser utilizado fuera de la clase, tengo la intención de usarlo, puedo crear un archivo fuente aparte de la enumeración. De lo contrario voy a colocar dentro de la clase tengo la intención de usarlo.

  8. 2

    Generalmente me encuentro con que la enumeración se centra alrededor de una sola clase, como un MyClassOptions tipo de cosa.

    En ese caso, el lugar de la enumeración en el mismo archivo de Miclase, pero dentro del espacio de nombres, pero fuera de la clase.

    namespace mynamespace
    {
      public partial class MyClass
      {
      }
      enum MyClassOptions
      {
      }
    }
    
  9. 2

    Yo uso los espacios de nombres anidados para esto. Me gusta de ellos es mejor que poner la enumeración dentro de una clase, porque fuera de la clase tiene que usar la plena MyClass::MyEnum de uso, incluso si MyEnum no va a entrar en conflicto con cualquier otra cosa en el ámbito de aplicación.

    Mediante el uso de un espacio de nombres anidados puede utilizar el «uso» de la sintaxis. También voy a poner las enumeraciones que se refieren a un determinado subsistema en su propio archivo para que usted no tenga problemas de dependencia de tener que incluir el uso de ellos.

    Por lo que en la enumeración de encabezado de archivo:

    //MyEnumHeader.h
    //Consolidated enum header file for this dll,lib,subsystem whatever.
    namespace MyApp
    {
      namespace MyEnums
      {
        enum SomeEnum { EnumVal0, EnumVal1, EnumVal2 };
      };
    };
    

    Y, a continuación, en el archivo de encabezado de clase que se obtiene:

    //MyInterfaceHeader.h
    //Class interfaces for the subsystem with all the expected dependencies.
    
    #include "MyEnumHeader.h"
    
    namespace MyApp
    {
      class MyInterface
      {
      public:
        virtual void DoSomethingWithEnumParam (MyEnums::SomeEnum enumParam) = 0;
      };
    };
    

    O uso como muchos enum archivos de encabezado como hace sentido. Me gusta mantenerlos separados de los de la clase encabezados para las enumeraciones pueden ser params en otras partes del sistema sin necesidad de la clase de los encabezados. Entonces, si usted quiere hacer uso de ellos en otros lugares que usted no tiene que tener la encapsulación de clase defs como lo haría si el enumeraciones fueron declaradas dentro de las clases.

    Y como se mencionó antes, en el exterior de código, puede utilizar los siguientes:

    using namespace MyApp::MyEnums;
    
  10. 1

    Que tienden a definir ellos, donde su uso es evidente en lo evidente. Si tengo un typedef para una estructura que hace uso de ella, por alguna razón…

    typedef enum {
      HI,
      GOODBYE
    } msg_type;
    
    typdef struct {
     msg_type type;
     union {
       int hivar;
       float goodbyevar;
      }
    } msg;
    

Dejar respuesta

Please enter your comment!
Please enter your name here