protected string NotifyToHandler <T>(List <T> handlers, bool hasOverride, bool hasReturnValue, string methodName, params object[] args) { if (handlers == null) { return(StringUtil.Format("NotificationManager.NotifyToHandler -> null is handlers. method nmae : {0}", methodName)); } if (handlers.Count == 0) { return(StringUtil.Format("NotificationManager.NotifyToHandler -> zero count handler list. method name : {0}", methodName)); } System.Type[] types = new System.Type[args.Length]; for (int i = 0; i < types.Length; i++) { if (args[i] != null) { types[i] = args[i].GetType(); if (Setting.UseDebugLog == true) { string format = "{0}, {1} <{2}>"; if (i == 0) { format = "{0}, args = {1} <{2}>"; } Setting.debugHandlerLogInfo = StringUtil.Format(format, Setting.debugHandlerLogInfo, types[i].ToString(), args[i].ToString()); } } } string result = string.Empty; foreach (T handler in handlers) { if (null == handler) { continue; } MethodInfo method = handler.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, System.Type.DefaultBinder, types, null); bool returnValue = false; bool IsNotify = false; if (method != null) { try { IsNotify = true; if (hasOverride == true) { IsNotify = method.IsOverride(); } if (IsNotify == true) { var returnValueObject = method.Invoke(handler, args); if (hasReturnValue == true && returnValueObject != null) { returnValue = System.Convert.ToBoolean(returnValueObject); } } } catch (System.Exception ex) { throw ex; } } else { if (result == string.Empty) { result = StringUtil.Format("NotificationManager.NotifyToHandler -> not find method. handler name : {0}, method name : {1}\n", handler.ToString(), methodName); } else { result = StringUtil.Format("{0}NotificationManager.NotifyToHandler -> not find method. handler name : {1}, method name : {2}\n", result, handler.ToString(), methodName); } } if (Setting.UseDebugLog == true) { if (method != null) { Setting.AddDebugHandlerInfo(StringUtil.Format("Invoke = {0} / name = {1}, method = {2}", IsNotify.ToString(), handler.ToString(), method.ToString())); } else { Setting.AddDebugHandlerInfo(StringUtil.Format("Invoke = False / name = {0}, method = {1}", handler.ToString(), methodName)); } } if (returnValue == true) { return(result); } } return(result); }