define - enum string c#
¿Las enumeraciones en C#tienen su propio archivo? (15)
Tengo una clase que usa una enumeración, la enumeración se encuentra actualmente en su propio archivo, lo que parece un desperdicio.
¿Cuál es la opinión general sobre las enumeraciones que se colocan dentro del espacio de nombres de un archivo en el que se consumen? ¿O debería la enumeración realmente vivir en su propio archivo cs?
Editar
Debo mencionar que, si bien la clase en cuestión utiliza estas enumeraciones, también lo hacen las personas externas que llaman. En otras palabras, otra clase puede establecer estas enumeraciones. Por lo tanto, no se usan internamente para la clase, de lo contrario, esta pregunta sería obvia.
Creo que eso depende del alcance de la enumeración. Por ejemplo, si la enumeración es específica de una clase, por ejemplo, se usa para evitar el escenario de la constante mágica, entonces diría que la ubique en el mismo archivo que la clase:
enum SearchType { Forward, Reverse }
Si la enumeración es general y puede ser utilizada por varias clases para diferentes escenarios, entonces me inclinaría a utilizarla en su propio archivo. Por ejemplo, a continuación se puede utilizar para varios propósitos:
enum Result { Success, Error }
Depende de qué acceso se necesita.
Si la enumeración solo es utilizada por una sola clase, está bien declararla dentro de esa clase porque no necesita usarla en ningún otro lado.
Para las enumeraciones utilizadas por varias clases o en una API pública, siempre mantendré la definición en su propio archivo en el espacio de nombres apropiado. Es mucho más fácil de encontrar de esa manera, y la estrategia sigue el patrón de un objeto por archivo, que también es bueno usar con clases e interfaces.
En general, prefiero que mis enums estén en el mismo archivo que la clase de la que probablemente sea un atributo. Si, por ejemplo, tengo una Task
clase, entonces la enumeración TaskStatus
estará en el mismo archivo.
Sin embargo, si tengo enumeraciones de naturaleza más genérica, las guardo contextualmente en varios archivos.
Esto es realmente solo una cuestión de preferencia.
Prefiero poner cada enumeración en su propio archivo (igualmente para cada interfaz, clase y estructura, sin importar cuán pequeña sea). Los hace más fáciles de encontrar cuando vengo de otra solución o si no tengo una referencia al tipo en cuestión.
Poner un solo tipo en cada archivo también facilita la identificación de cambios en los sistemas de control de fuente sin diferir.
La pregunta que debe hacerse es: ¿hay algo sobre un tipo de enumeración en C # que indique que debo tratarlo de manera diferente a todos los otros tipos que creo?
Si la enumeración es pública, debe tratarse como cualquier otro tipo público. Si es privado, grábelo como un miembro anidado de la clase que lo usa. No hay una razón convincente para poner dos tipos públicos en el mismo archivo simplemente porque uno es una enumeración. El hecho de que sea un tipo público es todo lo que importa; el sabor del tipo no.
Me gusta tener un archivo de enumeraciones públicas llamado E que contenga cada enum separada, luego se puede acceder a cualquier enumeración con E ... y están en un solo lugar para administrar.
Muy simple gran ventaja para separar el archivo. Cuando un objeto está en su propio archivo MyObjectName.cs ... puede ir al explorador de soluciones y escribir MyObjectName.cs y mostrar exactamente 1 archivo. Todo lo que hace que la depuración sea mejor es agradable.
Otra ventaja en una nota similar, si busca todos los archivos ( ctrl + shft + F ) para un nombre, puede encontrar 20 referencias al nombre en el mismo archivo ... y ese nombre encontrado será parte de diferentes objetos. En la ventana Buscar resultados, todo lo que puede ver es el número de línea y el nombre del archivo. Tendría que abrir el archivo y desplazarse para descubrir en qué objeto se encontraba la referencia encontrada.
Todo lo que hace que la depuración sea más fácil, me gusta.
No diría "derrochador" (¿cuánto cuesta un archivo adicional?), Pero a menudo es inconciente. Por lo general, hay una clase que está más estrechamente relacionada con la enumeración, y las pongo en el mismo archivo.
Otra ventaja de poner cada tipo (clase, estructura, enumeración) en su propio archivo es el control de fuente. Puede obtener fácilmente toda la historia del tipo.
Si está utilizando el complemento USysWare File Browser para Visual Studio, puede encontrar muy rápidamente archivos de nombres particulares en su solución. Imagine que busca una enumeración que no está en su propio archivo sino que está enterrada en algún archivo en una solución gigantesca.
Para soluciones pequeñas, no importa, pero para las grandes, se vuelve aún más importante mantener las clases y las enumeraciones en sus propios archivos. Puede encontrarlos rápidamente, editarlos y más. Recomiendo encarecidamente poner tu enumeración en su propio archivo.
Y como se dijo ... ¿Qué tan derrochador es un archivo que termina siendo solo un par de kb?
Si tiene múltiples proyectos en una solución. Entonces mejor crea otro proyecto de Utilities
. A continuación, cree una carpeta /Enumerations
y cree una static class
anidada. Y luego asigne cada clase estática donde creará enumeración que corresponda al nombre de sus proyectos. Por ejemplo, tiene un proyecto llamado DatabaseReader y DatabaseUsers, entonces puede nombrar la clase estática como
public static class EnumUtility {
#region --Database Readers Enum
public static class EnumDBReader {
public enum Actions { Create, Retrieve, Update, Delete};
}
#endregion
#region --Database Users Enum
public static class EnumDBUsers {
public enum UserIdentity { user, admin };
}
#endregion
}
Entonces se declarará toda la enumeración que se puede usar en todas las soluciones por proyecto. Use # region
para separar cada preocupación. Por esto, es más fácil buscar cualquier enumeración
Tiendo a poner enumeraciones en sus propios archivos por una razón muy simple: al igual que con las clases y las estructuras, es bueno saber exactamente dónde buscar si desea encontrar la definición de un tipo: en el archivo del mismo nombre. (Para ser justos, en VS siempre puedes usar "Ir a Definición" también).
Obviamente, puede salirse de control. Un colega donde trabajo incluso hace archivos separados para los delegados.
Ubico principalmente dentro del espacio de nombres y fuera de la clase para que se pueda acceder fácilmente a otras clases en ese espacio de nombres como a continuación.
namespace UserManagement
{
public enum UserStatus { Active, InActive }
class User
{
...
}
}
Una ventaja de usar un archivo separado para enumeraciones es que puedes eliminar la clase original que usó la enumeración y escribir una nueva clase usando la enumeración.
Si la enumeración es independiente de la clase original, colocarla en un archivo separado facilita los cambios futuros.
Esto es completamente una cuestión de estilo. Lo que tiendo a hacer es tener un archivo llamado Enums.cs
en la solución en la que se recopilan las declaraciones enum.
Pero de todos modos se encuentran a través de la tecla F12 .