How to make my enum inherit from a class? : Before:

    enum EMagicAbility{
        Fireball,
        IceBolt,
        BlackMagic
    };
    enum EPhysicalAbility{
        SwordLance,
        FearlessBlow,
        RagnarokRage
    };
    enum ERangedAbility{
        Snipe,
        RainOfArrows,
        CrossbowShot
    };
    enum EBiologicalAbility{bla,bla,bla};
    enum Eblabla{};
    enum Eevenmore{};
    ... There are many more abilities ...
    ...

    //Each EMagicAbility can only have either zero or one Ability value.
    Dictionary<EMagicAbility,Ability> myMagicAbilityDictionary;
    //Each EPhysicalAbility can only have either zero or one Ability value.
    Dictionary<EPhysicalAbility,Ability> myPhysicalAbilityDictionary;
    //Each EPhysicalAbility can only have either zero or one Ability value.
    Dictionary<ERangedAbility,Ability> myRangedAbilityDictionary;
    //Each EBiologicalAbility can only have either zero or one Ability value.
    Dictionary<EBiologicalAbility,Ability> myBiologicalAbilityDictionary;
    //Each Eblabla can only have either zero or one Ability value.
    Dictionary<Eblabla,Ability> myBlablaAbilityDictionary;
    //Each Eevenmore can only have either zero or one Ability value.
    Dictionary<Eblabla,Ability> myBlablaAbilityDictionary;
    ... keeps going on...
    ...

After:

    enum class EAbility{}
    enum EMagicAbility:EAbility{
        Fireball,
        IceBolt,
        BlackMagic
    };
    enum EPhysicalAbility:EAbility{
        SwordLance,
        FearlessBlow,
        RagnarokRage
    };
    enum ERangedAbility:EAbility{
        Snipe,
        RainOfArrows,
        CrossbowShot
    };
    enum EBiologicalAbility:EAbility{bla,bla,bla};
    enum Eblabla:EAbility{};
    enum Eevenmore:EAbility{};
    ... There are many more abilities ...
    ...

    //Each any enum derived from Eability can only have either zero or one Ability value.
    Dictionary<EAbility,Ability> myAbilityDictionary;
    //I don't have to create another dictionary when I create a new category of Abilities! Yay!




This is probably a super similar to this question:

http://stackoverflow.com/questions/35191235/what-variable-type-should-i-use-to-store-types-of-a-non-sealed-class-or-interfac/35191505#35191505

In which I would use this instead:

    //I can remove all enumerations have such a clean, one-line code <3<3
    Dictionary<typeof(Ability),Ability> myAbilityDictionary;

EDIT: After doing some more research, I found out that this may be a viable option for me: http://stackoverflow.com/questions/518442/enum-subset-or-subgroup-in-c-sharp The problem with this is that I will have a behemoth amount of lines of code, which I rather find a more sane way to solve this.

Also, an up vote would be really, really helpful since I can't access some features in stackoverflow, thank you.