有人请解释以下函数中最后三行代码的含义。
public static void AddAssemblyToObject(Assembly assembly, string className, GameObject gameObj)
{
Type scriptClass = assembly.GetType(className);
MethodInfo scriptFunc = scriptClass.GetMethod("AddScriptToComponent");
//i dont understand what this is and how i can simplify it
var del = (Func<GameObject, MonoBehaviour>)
System.Delegate.CreateDelegate(typeof(Func<GameObject, MonoBehaviour>), scriptFunc);
MonoBehaviour addComponent = del.Invoke(gameObj);
}
答案 0 :(得分:1)
很快,您可以将delegate
想象成一些变量,您可以在其下找到方法(非值)。
var del = (Func<GameObject, MonoBehaviour>)
System.Delegate.CreateDelegate(typeof(Func<GameObject, MonoBehaviour>), scriptFunc);
首先,您调用方法来创建委托:
System.Delegate.CreateDelegate();
参数:
// 1.
// calling typeof() method, which returns type of object
typeof(
Func<GameObject, MonoBehaviour>
)
// 2.
// variable, that stored information about some method/aplication code
scriptFunc
从上面的代码您正在根据类型和方法名称创建一个委托(&#34;指向代码&#34;的指针)。
MonoBehaviour addComponent = del.Invoke(gameObj);
最后一行调用&#34;代码&#34;我们指着,返回结果(存储在addComponent
变量)。
四处走动,如果可以轻松访问该方法,您只需执行(与上述相同):
MonoBehaviour addComponent = AddScriptToComponent();
原因是您无法简单地使用该方法,因此您需要使用反射和委托。