我有一个字符串列表,它有不同的事件类型名称。代码如下,
public class Main
{
public void Run()
{
List<string> classList = new List<string>
{
"Event_one",
"Event_two"
};
foreach (string item in classList)
{
IEvent ent;
switch (item)
{
case "Event_one":
ent = new EventOne();
ent.HandlEvent();
break;
case "Event_two":
ent = new EventTwo();
ent.HandlEvent();
break;
}
}
}
}
public class EventOne : IEvent
{
public void HandlEvent()
{
throw new NotImplementedException();
}
}
public class EventTwo : IEvent
{
public void HandlEvent()
{
throw new NotImplementedException();
}
}
public interface IEvent
{
void HandlEvent();
}
如何删除switch语句并使代码更松散耦合? 我的代码位于网站/ app_code中。
答案 0 :(得分:0)
使用将从字符串返回IEvent实例的Factory,然后在其上调用HandlEvent。但是,这基本上意味着您正在工厂中移动开关。
答案 1 :(得分:0)
您可以使用反射来实例化您拥有的名称/标识符指定的类型(可能通过类型的属性进行额外的抽象来映射名称)。
答案 2 :(得分:0)
您可以这样做:
public void Run()
{
List<string> classList = new List<string>
{
"EventOne",
"EventTwo"
};
string assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
foreach (string item in classList)
{
IEvent ent = Activator.CreateInstance(Type.GetType(assemblyName + "." + item)) as IEvent;
if (ent != null)
ent.HandlEvent();
}
}