C# 在单个枚举常量上定义函数
我的一个类将enum作为其属性之一,该类的定义如下所示:C# 在单个枚举常量上定义函数,c#,interface,enums,class-design,C#,Interface,Enums,Class Design,我的一个类将enum作为其属性之一,该类的定义如下所示: public class A { string properrty1; int id; CustomEnum enum; public A() { //initialize the properties } } 因此,基于枚举类型,我需要该类调用一个函数,该函数将访问该类的某些属性并使用它执行操作 最好的方法是什么 我在考虑将接口作为类的属性之一,然后基于枚举在类的构造
public class A
{
string properrty1;
int id;
CustomEnum enum;
public A()
{
//initialize the properties
}
}
因此,基于枚举类型,我需要该类调用一个函数,该函数将访问该类的某些属性并使用它执行操作
最好的方法是什么
我在考虑将接口作为类的属性之一,然后基于枚举在类的构造函数中实例化接口,需要时可以执行classObject.interface.interfaceImplementation()
这听起来是个好办法吗?如果是,您可以建议一种初始化接口的好方法,除了使用一组switch case语句来实例化该标记类型的接口的适当实现之外。一个选项是使用
字典:
私有静态只读字典一个选项是拥有一个字典
:
private static readonly Dictionary首先,switch
语句有什么问题?如果您所做的只是调用一个函数,只需在其中放入一个开关
,并适当地调用它——不需要接口或其他任何东西。不要过度设计它
现在,如果您有充分的理由不使用这种方法,那么切换的另一种选择是使用字典,其中T与您需要执行的操作相匹配。首先,switch
语句有什么问题?如果您所做的只是调用一个函数,只需在其中放入一个开关
,并适当地调用它——不需要接口或其他任何东西。不要过度设计它
现在,如果您有充分的理由不使用这种方法,那么切换的另一个替代方法是字典
,其中T与您需要执行的操作相匹配。那么,您是否尝试基于枚举值调用函数?那么,是否尝试基于枚举的值调用函数?还可以在运行时使用反射构建操作字典。这样可以消除一个可能被忽略的维护步骤。@Skizz:但同时引入了易出错的反射:)这是一种可能性,但我认为在做出决定之前,我需要查看用例(以及它发生的频率)。您还可以在运行时使用反射构建操作字典。这样可以消除一个可能被忽略的维护步骤。@Skizz:但同时引入了容易出错的反射:)这是一种可能性,但我认为在做出决定之前,我需要查看用例(以及它发生的频率)。
private static readonly Dictionary<CustomEnum, Action<A>> Actions =
{
{ CustomEnum.Foo, FooAction },
{ CustomEnum.Bar, BarAction },
{ CustomEnum.Baz, BazAction },
};
private static void FooAction(A a) { ... }
private static void BarAction(A a) { ... }
private static void BazAction(A a) { ... }
public void DoSomething()
{
Actions[enumValue](this);
}