i have problem with enum
I need make a enum in base class or interface (but empty one)
class Base
{
public enum Test;
// ???
}
and after make diffrent enums in some parent classes
class Parent1
{
public enum Test {A, B, C};
}
class Parent2
{
public enum Test {J, H, K};
}
and now i have next class with method when i have to use enum
class Test<T>
{
public void Foo(Test enum)
{
int value = (int) enum;
// ...
}
}
It's there any way to do something like that ?
If not i have to use static ints in every class ...
class Parent1
{
public static int A = 0;
public static int B = 5;
public static int C = 7;
}
class Parent2
{
public static int J = 1;
public static int H = 3;
public static int K = 6;
}
class Test<T>
{
public void Foo(int enum)
{
int value = enum;
// ...
}
}
I't looks bad in code ... in some classes i have to use ~20+ variables
There is no such thing as an abstract enum (that can have different implementations in subclasses) - but generics may be an option:
class Base<T> where T : struct {
private T value;
public void Foo(T value) {
this.value = value;
}
}
class Parent1 : Base<Parent1.Enum1> {
public enum Enum1 {A, B, C};
}
class Parent2 : Base<Parent2.Enum2> {
public enum Enum2 { J, H, K };
}
The only problem is that this doesn't enforce that only enums are usable - you can do this at runtime, though - for example in a type initializer:
static Base() {
if (!typeof(T).IsEnum) throw new InvalidOperationException(
typeof(T).Name + " is not an enum");
}