当枚举无法在接口中定义时,我该如何定义一个包含具有Enum
参数的方法的接口?
由于Enum
不是引用类型,因此不能将Object
类型用作传入参数的类型,那么怎么办呢?
public enum MyEnum
{
Hurr,
Durr
}
public interface MyInterface
{
void MyMethod(MyEnum value);
}
如果这不是您要做的事,请留下评论,以便人们了解您的问题所在。因为,虽然枚举类型没有在接口内定义,但这是一种完全正常和可接受的设计。
interface MyInterface
{
void MyMethod(Enum @enum);
}
@enum
是变量的名称。这种语法没有什么特别之处。 - BlueRaja - Danny Pflughoeft另一种解决方案是使用通用类型:
public enum MyEnum
{
Foo,
Bar
}
public interface IDummy<EnumType>
{
void OneMethod(EnumType enumVar);
}
public class Dummy : IDummy<MyEnum>
{
public void OneMethod(MyEnum enumVar)
{
// Your code
}
}
public interface IDummy<EnumType> where EnumType : Enum
{
void OneMethod(EnumType enumVar);
}
你必须在两个方面实现枚举并引用接口命名空间,例如:
public interface IConfigProvider
{
enum OUType
{
Prop1,
Prop2
};
string GetConfig(OUType outType);
}
public class ConfigProvider
{
enum OUType
{
Prop1,
Prop2
};
public string GetConfig(IConfigProvider.OUType outType)
{
...
}
}
使用方法:
configProvider.GetConfig(IConfigProvider.OUType.Prop1)
如果你在谈论通用接口以及C#不允许你将泛型类型限制为枚举类型,那么这个问题的答案中包含两种不同的解决方法。
class
,作为 IEventLoginterface
的辅助类。目前它只包含一个enum
,但我可以在我的 interface 中添加任何需要的 "types"。我喜欢将枚举放在一个“类名相似”的类中,这样即使仅仅是名称上的绑定,枚举也会更紧密地与特定的接口相关联。 - franji1