【发布时间】:2012-12-19 06:26:05
【问题描述】:
让我试着简化我的问题:
我有四个类:Admins、Users、Players、Roles
数据库返回我需要执行的方法的名称。例如,如果返回Admins_GetName,则需要在Admins 类上执行GetName() 方法。
如果返回Players_GetRank,则需要在Players 类上调用GetRank() 方法。
我不想编写包含我所有业务逻辑的巨大 IF 或 SWITCH 语句。不使用反射最有效的解决方案是什么?如果可能的话,我想避免反射带来的性能影响。
请记住,所有方法可能有不同的参数,但会返回字符串。
这是我现在想做的事情: 1) 有一个带有 switch 语句的方法,它将分解数据库值并找到我需要执行的类和方法。 比如:
switch(DbValue)
{
case DbValue == "Admins_GetName":
Declare a delegate to Admins.GetName();
return;
case: DbValue = "Players_GetRank"
Declare a delegate to Players.GetRank();
return;
.
.
.
etc
}
返回类/方法引用;
2) 将上面的声明传递给:
var myValue = Retrieved method.invoke()
你们能否建议我完成此任务的最佳方法,或帮助我了解如何实现它的正确语法。
谢谢。
【问题讨论】:
-
如果所有方法都可能有不同的参数和不同的返回类型,那么无论如何你都会有 switch 语句。
-
想想他们总是会返回字符串
标签: c# reflection delegates