Pergunta

Sei que você não pode usar a herança com enums; portanto, na minha classe base, quero definir que as classes que o implementam devem retornar um enumeração de algum tipo para uma propriedade.

Idealmente, isso seria como:

public abstract BaseEnum MyEnum { get; set; }

Em seguida, todos os implementadores teriam que retornar alguma forma de enum. Mas, obviamente, Baseenum não existe. Eu posso usar objeto, mas prefiro não.

Existe uma boa maneira de fazer isso?

Editar: Estou perguntando isso porque eu essencialmente quero manter o nome da propriedade nas classes implementadoras da mesma forma - eu sei que não poderei trabalhar com a enumeração na classe base, mas se eu não colocasse Na base, as classes implementadoras poderiam decidir sobre seus próprios nomes de propriedades para sua enumeração, o que pode se tornar incerto ao longo do tempo, pois eles iriam para suas próprias implementações.

Foi útil?

Solução

O mais próximo que você pode facilmente chegar em C# é tornar o tipo genérico com uma restrição de estrutura:

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

então

public class DerivedClass : BaseClass<SomeEnum>

O C# não permite especificar uma restrição que o restringe aos tipos de enumeração, mesmo que a CLI a apoie. Eu tenho um projeto chamado Melodia irrestrita que usa truques pós -construção para aplicar essa restrição - mas eu não sugeriria que você adote a mesma abordagem, a menos que esteja se sentindo um pouco ousado. A restrição da estrutura o limitará pelo menos a tipos de valor, o que pode ser bom o suficiente.

Outras dicas

Todos os enumes herdam do System.enum.

Você deve dar uma olhada aqui: Enumera “herança”:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top