C#笔记:反射执行方法与遍历调用方法
反射执行方法:
代码参考编程猎人:
https://www.programminghunter.com/article/4509385212/
代码思路:
1、获得需要反射的Test类的类名,typeof返回的字符串为命名空间+类名:"反射调用方法.Test";同时需要调用的类中的方法Method(这里偷懒直接用字符串表示了)。
2、将strClass由字符串转为Type,并由此创建一个类的实例,等同于new Test()。
3、用type.GetMethod获取Test类中指定名字的方法,并且用Type[]{}匹配参数,成功后的方法被存入MethodInfo类型的变量mi中。
4、用object[]创建要传入的实参parameters。
5、mi执行Invoke方法,传入被创建的Test实例obj和实参parameters,方法Method就会执行了。
遍历执行方法:
代码思路:
创建一个虚拟类作为基类,创建几个子类实现基类的Call方法,在主程序中创建一个List把不同的实例装入,遍历所有实例的Call方法。
反射执行方法与遍历调用方法各有优劣,反射执行方法的优点在于更加灵活,可以调用重载的方法,缺点是过于复杂晦涩,且需要预先知道类中需要调用的方法和参数;遍历调用方法则较为简单直观,缺点是无法重载方法。
在我的观察中,似乎Unity引擎使用了前者来调用gameObject的方法,而Godot引擎使用后者来调用Node的方法。
至于选择什么样的方案,还是要看项目的具体情况。