我可以在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无法相互转换。非常感谢。

我可以在C#中为枚举创建接口吗

不可以,因为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);
        }
    }
}