我可以在C#中为枚举创建接口吗
本文关键字:创建 接口 枚举 我可以 | 更新日期: 2023-09-27 18:27:36
假设我有两个枚举,如下所示:
namespace A
{
public enum AE
{
AE_0,
AE_1
}
}
namespace B
{
public enum BE
{
BE_0,
BE_1
}
}
我想使用这两个枚举,看起来像一个,这样,在一个函数中,我们可以同时使用F(AE)和F(BE),而不需要定义两个函数。
据我所知,我们可以为两个不同的类创建一个接口,这样,如果我们将接口指定为参数,就可以使用这两个类。
我可以对enum做同样的操作吗?
谢谢。
编辑:我提出了这个问题,因为我在命名空间A中已经有了枚举A。现在我想在命名空间B中添加枚举B,而不接触命名空间A中的任何内容。然而,在命名空间A,我已经有了一个以枚举A为参数的函数F。现在我想将函数F与命名空间B中的枚举B一起使用。我遇到了一个错误,因为枚举A和枚举B无法相互转换。非常感谢。
enum
继承自System.Enum
,仅此而已。
此外,尽管有明显的外观,但将接口应用于枚举不会产生所需的结果,因为枚举成员实现为static
值,而interface
不能指定static
值。
最后,如果您有确实应该接受两种enum
参数的东西,请考虑它们应该是两个单独的enum
,还是一个带有[Flags]的enum
。
正如其他人所提到的,最好使用泛型方法,因为C#不允许您为枚举创建接口。我创建了一个快速示例,让您传入来自不同枚举的成员。
namespace A
{
public enum AE
{
AE_0,
AE_1
}
public class DoSomething
{
public static void F<T>(T enumMember) where T : struct
{
// exit early if something other than enum entered
if (!typeof(T).IsEnum)
{
throw new ArgumentException("T is not enum");
}
// Do whatever you need to do here
Console.WriteLine(enumMember.ToString());
}
}
}
namespace B
{
public enum BE
{
BE_0,
BE_1
}
}
namespace C
{
public class Class1
{
public static void processEnum()
{
A.DoSomething.F<A.AE>(A.AE.AE_0);
A.DoSomething.F<B.BE>(B.BE.BE_0);
}
}
}