example - Métodos dentro de enum en C#
enum to list c# (5)
C # No permite el uso de métodos en los enumeradores, ya que no es un principio basado en la clase, sino más bien una matriz bidimensional con una cadena y un valor.
El uso de clases es altamente desaconsejado por Microsoft en este caso, use (data) struct (ures) en su lugar; El STRUCT está pensado como una clase ligera para datos y sus manejadores y puede manejar funciones muy bien. C # y su compilador no tienen las capacidades de seguimiento y eficiencia que se conocen de JAVA, donde cuantas más veces se usa una determinada clase / método, más rápido se ejecuta y se "anticipa" su uso. C # simplemente no tiene eso, por lo que para diferenciar, usa STRUCT en lugar de CLASS.
En Java hay una opción para escribir enum y funciones dentro del objeto enum que se pueden usar.
¿Hay tal posibilidad en C # o es solo una colección de cuerdas y eso es todo?
Traté de "anular" la función ToString()
y no compila. ¿Alguien tiene una muestra de código simple?
Nop. Puede crear una clase, luego agregar un conjunto de propiedades a la clase para emular un enum, pero eso no es realmente lo mismo .
class MyClass
{
public string MyString1 { get{ return "one";} }
public string MyString2 { get{ return "two";} }
public string MyString3 { get{ return "three";} }
public void MyMethod()
{
// do something.
}
}
Un mejor patrón sería poner sus métodos en una clase separada de su emum.
Otra opción es usar la clase de enumeración creada por Jimmy Bogard .
Básicamente, debes crear una clase que herede de su Enumeration
. Ejemplo:
public class EmployeeType : Enumeration
{
public static readonly EmployeeType Manager
= new EmployeeType(0, "Manager");
public static readonly EmployeeType Servant
= new EmployeeType(1, "Servant");
public static readonly EmployeeType Assistant
= new EmployeeType(2, "Assistant to the Regional Manager");
private EmployeeType() { }
private EmployeeType(int value, string displayName) : base(value, displayName) { }
// Your method...
public override string ToString()
{
return $"{value} - {displayName}!";
}
}
Entonces puedes usarlo como una enumeración, con la posibilidad de poner métodos dentro de él (entre otras cosas):
EmployeeType.Manager.ToString();
//0 - Manager
EmployeeType.Servant.ToString();
//1 - Servant
EmployeeType.Assistant.ToString();
//2 - Assistant to the Regional Manager
Puedes descargarlo con NuGet .
Puede escribir métodos de extensión para tipos enum:
enum Stuff
{
Thing1,
Thing2
}
static class StuffMethods
{
public static String GetString(this Stuff s1)
{
switch (s1)
{
case Stuff.Thing1:
return "Yeah!";
case Stuff.Thing2:
return "Okay!";
default:
return "What?!";
}
}
}
class Program
{
static void Main(string[] args)
{
Stuff thing = Stuff.Thing1;
String str = thing.GetString();
}
}
Puede escribir un método de extensión para su enumeración:
Cómo: Crear un nuevo método para una enumeración (Guía de programación C #)