Tengo una enumeración que es utilizada por múltiples clases. ¿Cuál es la mejor manera de implementar esto?C# ¿Cuál es la mejor manera de crear una enumeración utilizada por varias clases?
Respuesta
- poner el enumeraciones justo en el espacio de nombres (o crea un nuevo espacio de nombres para ellos) o
- ponerlos en una clase (estática?) En algún lugar si eso tiene más sentido.
Me gustaría mantenerlos en su propio archivo para un fácil acceso y una buena organización de cualquier manera.
Normalmente no los pongo en una clase a menos que de alguna manera "pertenezcan" allí. Como si tuviera una clase de automóvil con una enumeración para los tipos de automóvil, y una clase de carretera y una clase de puente que pueden establecer límites para los tipos de automóvil. Car.CarType
parece ser una organización lógica para esto ...
Ponlo en su propio archivo y simplemente declarar que:
enumeración pública Foo {a, b, c, d}
Tenga en cuenta sus espacios de nombre, por supuesto.
Normalmente, simplemente los arrojo al espacio de nombres. Es lo que hizo Microsoft escritura del marco .NET, así que es lo que hago también, para mantener la coherencia a entender :)
bueno, no sabía que pudieras hacer eso –
He aquí un ejemplo de tener dos enumeraciones en diferentes espacios de nombres:
using TotallyDifferentNameSpace.Enums;
namespace EnumEx
{
class Program
{
static void Main(string[] args)
{
CarType car = CarType.Audi;
PetrolType pType = PetrolType.Diesel;
}
}
public enum CarType
{
Volkswagen,
Audi,
Toyota,
Ford,
Porsche,
Lada
}
}
namespace TotallyDifferentNameSpace.Enums
{
public enum PetrolType
{
Gasoline,
Diesel
}
}
Mi consejo es que no se usa Enums en absoluto. Use singletons en su lugar.
Como
public class A : ISomeInterface
{
public static readonly A Instance = new A();
private A()
{
}
}
public class B : ISomeInterface
{
public static readonly B Instance = new A();
private B()
{
}
}
En la mayoría de los casos que funciona mejor y es mejor extender más tarde.
mejores deseos
Matze
Esto es algo similar al tipo de modelo de enum seguro, pero es sobreinnovación sin ningún motivo. Mantente ágil, refactoriza tus enums más tarde si es necesario. – DarkwingDuck
Se inicia el problema si necesita extender sus Enumeces más tarde. Un nuevo valor para el cliente A, otro para el cliente B. ¡Boom! ¡UPS! Ambos mapeados a la misma int. Por supuesto, si está 100% seguro de que Enum nunca cambiará ... – Matze
Si cree que las enumeraciones cambiarán, no debe usar enumeraciones. Use clases en su lugar. –
comentarios XML ayuda, especialmente si otros se utilizan
/// <summary>
/// Defines the types of cars we support
/// </summary>
public enum CarType
{
/// <summary>
/// VW - the peoples car
/// </summary>
Volkswagen,
Su nombre enumeración debe ser plural (según las instrucciones de FxCop)
public enum CarTypes
Agregue valores numéricos y use numeración bit a bit incluso si no planea usar bitw ise (es un dolor volver a numerar más tarde).
Volkswagen = 1,
/// <summary>
/// They own lambo... can't be all that bad
/// </summary>
Audi = 2,
/// <summary>
/// Good, cheap, reliable
/// </summary>
Toyota = 4,
Se puede poner una enumeración es un nuevo CodeFile con extensión .cs, por IntelliSense para trabajar asegurarse de que es parte de su proyecto/solución y por supuesto que debe haber una enumeración pública para que tenga un alcance de la solución de eso. Si intellisense es un problema, asegúrese de construir su solución una vez, tuve este problema una vez y solo lo reconstruí. El espaciado de nombres es una buena opción si desea organizar su código correctamente y está codificando un proyecto grande. El framework .NET era grande. por lo que tiene enumeraciones bajo espacios de nombres solo para una mejor comprensión y organización del código.
Sé que mi sugerencia va en contra del.NET Naming conventions, pero personalmente prefijo enumeraciones con 'E' y enum flags con 'F' (similar a cómo prefijamos Interfaces con 'I'). Realmente no entiendo por qué esta no es la convención. Los Enum/Flags son un caso especial, como interfaces que nunca cambiarán su tipo. No solo deja en claro lo que es, es muy fácil escribir en intellisense ya que el prefijo filtrará la mayoría de los otros tipos/variables/etc., y no tendrá estos conflictos de nombres.
Y eso también resolvería otro problema donde para ejemplos en WPF utilizan clases estáticas como enumeraciones (por ejemplo, FontWeights) que tienen instancias predefinidas de tipos pero no sabría si no las busca. Si acaban prefijos con 'E', todo lo que tendrías que hacer es escribir el carácter para encontrar estas clases estáticas especiales.
- 1. ¿Cuál es la mejor manera de incrementar una enumeración?
- 2. ¿Cuál es la mejor manera de comparar varias propiedades javabean?
- 3. ¿Cuál es la mejor manera de declarar una variable global?
- 4. ¿Cuál es la mejor manera de crear consultas complejas RESTful?
- 5. ¿Cuál es la mejor manera de crear una matriz de solo lectura en C#?
- 6. ¿Cuál es la mejor manera de crear una matriz dispersa en C++?
- 7. ¿Cuál es la mejor manera de seleccionar varias filas por ID en sql?
- 8. ¿Cuál es el mejor patrón de C# para implementar una jerarquía con una enumeración?
- 9. ¿Cuál es la mejor manera de perfilar una aplicación Sinatra?
- 10. ¿Cuál es la mejor manera de escribir comentarios en C?
- 11. ¿Cuál es la serialización predeterminada utilizada por ASP.net HttpRuntime.Cache
- 12. ¿Cuál es la mejor manera de transportar automáticamente un archivo fuente LilyPond en varias claves?
- 13. ¿Cuál es la mejor manera de dividir una cadena por un delimitador de manera funcional?
- 14. ¿Cuál es la mejor manera de proporcionar localización para Enumeraciones?
- 15. ¿Cuál es la mejor manera de crear un asistente en C# 2.0?
- 16. ¿Cuál es la mejor manera de crear una matriz de crecimiento dinámico en Scala?
- 17. Cuál es la mejor manera de autorizar una llave USB
- 18. ¿Cuál es la mejor manera de construir una NSCompoundPredicate compleja?
- 19. ¿Cuál es la mejor práctica para nombrar y codificar clases CSS e identificadores de varias palabras?
- 20. ¿Cuál es la mejor manera de analizar una gramática simple?
- 21. ¿Cuál es la mejor manera de solucionar problemas de rendimiento?
- 22. ¿Cuál es la palabra clave de rendimiento utilizada en C#?
- 23. ¿cuál es la mejor manera de verificar una matriz vacía?
- 24. ¿Cuál es la mejor manera de deducir una mesa?
- 25. ¿Cuál es la mejor manera de implementar una aplicación Pylons?
- 26. ¿Cuál es la mejor manera de atrapar una excepción IllegalArgumentException
- 27. ¿Cuál es la mejor manera de copiar una lista?
- 28. C# La mejor manera de comunicarse entre las clases
- 29. ¿Cuál es la mejor manera de crear una página de inicio de sesión de PHP?
- 30. ¿Cuál es la mejor forma de diseñar una clase C#?
¿Cómo pongo una enumeración en mi espacio de nombres? ¿Cómo creo un archivo así? – Martijn
Crea un nuevo archivo .cs con: namespace MyNameSpace {public enum MyEnum {Value1, Value2, Value3}} –
Así que solo creo una clase? – Martijn