天天看點

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

}