Search code examples
c#inheritanceenumsabstract-base-class

Uses different Enum in different inherited class


I have two classes inherited from a base class, is it possible to use different enum on their respective class?

public abstract class BaseClass
{
    public enum BaseEnum {a,b,c}
    public void Function1(BaseEnum myEnum)
    {
       // Something here
    }
}

public class DerivedClass1 : BaseClass
{
    public enum DerivedEnum {d,e,f}
    public void Function1(DerivedEnum myEnum)
    {
       // Something here
    }
}

public class DerivedClass2 : BaseClass
{
    public enum DerivedEnum2 {g,h,i}
    public void Function1(DerivedEnum2 myEnum)
    {
       // Something here
    }

}

I tried to hide the base enum where Function1 will perform different operations based on MyEnum, I am not sure am I doing this right. Is this a good way to use different enum in inherited class? And I am not sure if this is a good practice

public abstract class BaseClass
{
    public enum MyEnum {a,b,c}
    public void Function1(MyEnum myEnum)
    {
       // Something here
    }
}

public class DerivedClass1 : BaseClass
{
    public new enum MyEnum {d,e,f}

}

public class DerivedClass2 : BaseClass
{
    public new enum MyEnum {g,h,i}


}


Solution

  • You can use generics like this :

    public abstract class BaseClass<TEnum> where TEnum : Enum
    {
      public void Function1(TEnum myEnum)
      {
          // Something here
      }
    }
    
    public class DerivedClass1 : BaseClass<DerivedEnum>
    {
    }