天天看点

【C#】反射创建类对象与传参

注:以下是C#结合Unity的一个方法,用于展示反射创建类对象与传参

public void OnValueChange(GameObject toggle) {
    //界面显示部分
    Debug.Log("toggle is:"+toggle.GetComponent<UIToggle>().value);
    if (toggle.GetComponent<UIToggle>().value){
        toggle.GetComponent<UISprite>().spriteName = "green_bg";
        toggle.transform.FindChild("ToggleLabel").GetComponent<UILabel>().text = "ON";
        StateNum = 1;
    }
    else  {
        toggle.GetComponent<UISprite>().spriteName = "gary_bg";
        toggle.transform.FindChild("ToggleLabel").GetComponent<UILabel>().text = "OFF";
        StateNum = 0;
    }
    Vector3 tempv3 = toggle.transform.FindChild("ToggleLabel").transform.position;
    toggle.transform.FindChild("ToggleLabel").transform.position = toggle.transform.FindChild("ToggleSprite").transform.position;
    toggle.transform.FindChild("ToggleSprite").transform.position = tempv3;

    //实现功能部分
    string strClass = "VolumeManager";
    string callMethodName = toggle.transform.parent.name;
    Type t;
    object obj;
    //传参的类型
    Type[] params_type = new Type[1];
    params_type[0] = Type.GetType("System.Int32");
    //参数里传的值
    System.Object[] params_obj = new System.Object[1];
    params_obj[0] = StateNum;  
    //获取类
    t = Type.GetType(strClass);
    //获取方法(无参)
    //System.Reflection.MethodInfo method = t.GetMethod(callMethodName);
    //获取方法(有参数)
    System.Reflection.MethodInfo method = t.GetMethod(callMethodName,params_type);
    //对象初始化
    obj = System.Activator.CreateInstance(t);
    //调用方法
    method.Invoke(obj, params_obj);

}