理解C#untity“var del =(Func <gameobject,monobehaviour =”“>)”语法

时间:2018-01-04 14:10:48

标签: c# unity3d

有人请解释以下函数中最后三行代码的含义。

 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);

    }

1 个答案:

答案 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();

原因是您无法简单地使用该方法,因此您需要使用反射和委托。