C#根据传入的类名,方法名,执行此方法,或者反射赋值给委托
- 传入类的全名称,和类中的方法名称,然后执行此方法,或者赋值给委托。
在开发功能的时候,我总是会遇到一些业务场景,就是根据不同的参数或者配置,然后执行不同的业务逻辑。
最基本的,都会想到用if else,或者switch处理。
如果这种这种根据不同配置,执行不同逻辑在情况很多的时候,就会写很多这种判断,不利于阅读和扩展。
如果做成委托形式,就可以不写这种逻辑代码。
根据传入的类全名称和方法名称,然后反射出对象和方法,再赋值给委托,然后再执行,就可以不写这种逻辑判断。
using System;
using System.Reflection;
using System.Threading;
namespace reflector
{
class Program
{
public delegate void shuchu();//定义的委托
static void Main(string[] args)
{
//传入的类全名称
string className = "reflector.myclass";
//得到此类的类型
Type type = Type.GetType(className);
// 获取当前程序集
Assembly assembly = Assembly.GetExecutingAssembly();
//动态创建当前类型的对象
dynamic obj = assembly.CreateInstance(type.FullName);
//根据传入的方法名获取当前类型的方法
MethodInfo mthof = type.GetMethod("writemyseage");
//执行此方法,如果此方法有参数,则传入参数
mthof.Invoke(obj,null);//输出“hello”
//两种方法动态赋值给委托。
Delegate myshuchu2 = mthof.CreateDelegate(typeof(shuchu),obj);
Delegate myshuchu1 = Delegate.CreateDelegate(typeof(shuchu),obj,mthof);
//执行委托
myshuchu1.DynamicInvoke(null);//输出“hello”
myshuchu2.DynamicInvoke(null);//输出“hello”
}
}
class myclass{
public myclass(){}
public void writemyseage(){
Console.Write("hello");
}
}
}