/// <summary> /// 해당 오브젝트의 클래스 프로퍼티 정보를 전부 얻어둔다 /// </summary> /// <param name="settingObj"></param> private static void CachePropertiesForClass(IInGameSetting settingObj) { System.Type type = settingObj.GetType(); if (s_propLookupTable.ContainsKey(type)) // * 이미 캐싱되었다면 패스 { return; } // var propInfoTable = new Dictionary <string, PropertyInfo>(); s_propLookupTable[type] = propInfoTable; // IInGameSetting 의 프로퍼티 이름으로 해당 클래스 타입에서 검색하여 PropertyInfo를 얻어온다 int nameCount = s_propertyNames.Length; for (int i = 0; i < nameCount; i++) { string name = s_propertyNames[i]; propInfoTable[name] = type.GetProperty(name); } }
/// <summary> /// 프로퍼티 정보를 얻어옴 /// </summary> /// <param name="propertyName"></param> /// <returns></returns> protected static PropertyInfo LookupPropertyInfo(IInGameSetting settingObj, string propertyName) { //Debug.Log(string.Format("LookupPropertyInfo : {0} {1}", settingObj.GetType(), propertyName)); CachePropertiesForClass(settingObj); return(s_propLookupTable[settingObj.GetType()][propertyName]); }