/// <summary> /// call Method with no params and no return value; /// </summary> /// <param name="Instance">Instacne, if it is null means static method,else means instance method</param> /// <param name="type">TypeName ,eg "Namespace.ClassType"</param> /// <param name="method">MethodName</param> public void Invoke(Object Instance, string type, string method) { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); _app.Invoke(type, method, null); //InstanceTest sw.Stop(); message.AppendLine("Elappsed Time:" + sw.ElapsedMilliseconds + "ms\n"); }
//在适配器中重写所有需要在热更脚本重写的方法,并且将控制权转移到脚本里去 public override void TestAbstract(int a) { if (m_TestAbstract == null) { m_TestAbstract = m_Instance.Type.GetMethod("TestAbstract", 1); } if (m_TestAbstract != null) { param1[0] = a; m_Appdomain.Invoke(m_TestAbstract, m_Instance, param1); } }
public void Awake() { if (m_Instance != null) { if (m_AwakeMethod == null) { m_AwakeMethod = m_Instance.Type.GetMethod("Awake", 0); } if (m_AwakeMethod != null) { m_Appdomain.Invoke(m_AwakeMethod, m_Instance, null); } } }
public override MSystemJob GetJob(MEntity arg0) { if (!mGetJobGot) { mGetJob = instance.Type.GetMethod("GetJob", 1); mGetJobGot = true; } //对于虚函数而言,必须设定一个标识位来确定是否当前已经在调用中,否则如果脚本类中调用base.TestVirtual()就会造成无限循环,最终导致爆栈 if (mGetJob != null && !isGetJobInvoking) { isGetJobInvoking = true; param1[0] = arg0; object ret = appdomain.Invoke(mGetJob, instance, this.param1); isGetJobInvoking = false; return((MSystemJob)ret); } else { return(base.GetJob(arg0)); } }