自己写了一个UGUI管理器,最近新加入了一个功能,通过页面的字符串索引,在载入时自动打开一些页面。由于我的方法是这样定义的。
public T OpenDialog<T>(string page_name,string extra_index = "") where T : UGUIWidget
于是出现了一点点小小的悲剧。
只提供name的,不提供Class的话,是没法调用泛型方法的。
顺便,我的UGUI页面配置文件是这样定义的。
[System.Serializable]
public class UGUIPageData
{
public string name_index;
public string type_index;
public string prefab_path;
}
于是思考,能否利用反射,通过name_index找到type_index,然后获得具体Page的type,同过反射调用泛型方法,实质上,确实是可行的。具体如下
foreach (var page in auto_load_pages)
{
UGUIPageData pd = ugui_configs.FindPageWithNameNoTypeCheck(page);
MethodInfo mi = typeof(UGUIManager).