C#筆記:反射執(zhí)行方法與遍歷調用方法
反射執(zhí)行方法:
代碼參考編程獵人:
https://www.programminghunter.com/article/4509385212/
代碼思路:
1、獲得需要反射的Test類的類名,typeof返回的字符串為命名空間+類名:"反射調用方法.Test";同時需要調用的類中的方法Method(這里偷懶直接用字符串表示了)。
2、將strClass由字符串轉為Type,并由此創(chuàng)建一個類的實例,等同于new Test()。
3、用type.GetMethod獲取Test類中指定名字的方法,并且用Type[]{}匹配參數,成功后的方法被存入MethodInfo類型的變量mi中。
4、用object[]創(chuàng)建要傳入的實參parameters。
5、mi執(zhí)行Invoke方法,傳入被創(chuàng)建的Test實例obj和實參parameters,方法Method就會執(zhí)行了。
遍歷執(zhí)行方法:
代碼思路:
創(chuàng)建一個虛擬類作為基類,創(chuàng)建幾個子類實現基類的Call方法,在主程序中創(chuàng)建一個List把不同的實例裝入,遍歷所有實例的Call方法。
反射執(zhí)行方法與遍歷調用方法各有優(yōu)劣,反射執(zhí)行方法的優(yōu)點在于更加靈活,可以調用重載的方法,缺點是過于復雜晦澀,且需要預先知道類中需要調用的方法和參數;遍歷調用方法則較為簡單直觀,缺點是無法重載方法。
在我的觀察中,似乎Unity引擎使用了前者來調用gameObject的方法,而Godot引擎使用后者來調用Node的方法。
至于選擇什么樣的方案,還是要看項目的具體情況。
標簽: