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不符合ILDasmenum MyEnum
变成了。class private auto ansi sealed MyEnum扩展了[mscorlib]系统。enum
@DavidG,他说“enum继承…”,而不是“enum继承…”强调“an”