Pregunta

Yo sé que no se puede utilizar la herencia con enumeraciones, así que en mi clase base quiero definir que las clases que implementan debe devolver una enumeración de algún tipo de una propiedad.

Lo ideal sería que esto sería como:

public abstract BaseEnum MyEnum { get; set; }

A continuación, todos los implementadores tendrían que regresar algún tipo de enumeración. Pero, obviamente, BaseEnum no existe. Puedo utilizar el objeto, pero preferiría no hacerlo.

¿Hay una buena manera de hacer esto?

Editar Lo pregunto porque yo quiero esencialmente para mantener el nombre de la característica en las clases que implementan la misma - Sé que no voy a ser capaz de trabajar con la enumeración de la clase base, pero si no lo pongo en la base, a continuación, las clases que implementan podría decidir sobre sus propios nombres de propiedades para su enumeración, lo que podría llegar a ser claro con el tiempo, a medida que se deriva hacia sus propias implementaciones.

¿Fue útil?

Solución

Lo más cerca que se puede llegar fácilmente en C # es hacer que el tipo genérico con una restricción de estructura:

public abstract class BaseClass<T> where T : struct
{
    public abstract T MyEnum { get; set; }
}

entonces

public class DerivedClass : BaseClass<SomeEnum>

C # no se le permitirá especificar una restricción de la restricción de que es posible enumerar los tipos, a pesar de que la CLI lo soporta. Tengo un proyecto llamado Unconstrained Melody que utiliza post-construcción de trucos para hacer cumplir una restricción tal - pero yo no recomendaría tomar el mismo enfoque menos que se sienta un poco atrevido. La restricción de estructura por lo menos le limita a los tipos de valor, que puede ser lo suficientemente bueno.

Otros consejos

Todas las enumeraciones heredan de System.Enum.

Se debe echar un vistazo aquí: Enum “herencia” :

See section 8.5.2 of the CLI spec for the full details.
Relevant information from the spec

 * All enums must derive from System.Enum
 * Because of the above, all enums are value types and hence sealed
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top