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

C# 我可以为C中的枚举创建接口吗#,c#,enums,C#,Enums,假设我有两个枚举,如下所示: namespace A { public enum AE { AE_0, AE_1 } } namespace B { public enum BE { BE_0, BE_1 } } 我想使用这两个看起来像一个的枚举,这样,在一个函数中,我们可以同时使用F(AE)和F(BE),而无需定义两个函数 据我所知,我们可以为两个不同的类创建一个接口,这样,如果

假设我有两个枚举,如下所示:

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<代码>参数,考虑它们应该是两个单独的<代码> EnUM < /C> >,还是一个<代码> EnUM < /C> > .

,就像其他人提到的,最好是使用一个泛型方法,因为C语言不允许你为EnUM创建接口。我创建了一个快速示例,让您可以传入来自不同枚举的成员

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);
        }
    }
}
名称空间A
{
公共枚举AE
{
阿尤0,
阿尤1
}
公共级剂量测量
{
公共静态void F(T枚举成员),其中T:struct
{
//如果输入了枚举以外的内容,请提前退出
if(!typeof(T).IsEnum)
{
抛出新ArgumentException(“T不是枚举”);
}
//在这里做你需要做的一切
Console.WriteLine(enumMember.ToString());
}
}
}
命名空间B
{
公共枚举
{
成为"0",,
成为
}
}
命名空间C
{
公共班级1
{
公共静态void processEnum()
{
A.DoSomething.F(A.AE.AE_0);
A.DoSomething.F(B.BE.BE_0);
}
}
}

您可以创建一个采用泛型的函数,也可以利用枚举在默认情况下只是
int
s这一事实。不管怎样,这里似乎不需要接口。同意Lynn的观点,使用泛型,可能只在这里工作,并添加一个
where T:struct
约束。例如:
void F(T输入),其中T:struct{…}
如果枚举是可交换的,那么它们真的应该是不同的枚举吗?所以您想调用
F(AE.AE_1)
F(be.be_1)
?如果是,您能分享您的情景吗?可能有更好的解决方案
enum
不从
系统继承。enum
enum
系统。enum
@DavidG不符合ILDasm
enum MyEnum
变成了
。class private auto ansi sealed MyEnum扩展了[mscorlib]系统。enum
@DavidG,他说“enum继承…”,而不是“enum继承…”强调“an”