CSLE.DeleFunction.cacheFunction C# (CSharp) 메소드

cacheFunction() 공개 메소드

public cacheFunction ( Type deletype, Delegate dele ) : Delegate
deletype System.Type
dele System.Delegate
리턴 System.Delegate
        public Delegate cacheFunction(Type deletype, Delegate dele)
        {
            if (dele == null)
            {
                Delegate v = null;
                Dictionary<Type, Delegate> caches = null;
                if (callthis != null)
                {
                    if (callthis.deles.TryGetValue(function, out caches))
                    {
                        caches.TryGetValue(deletype, out v);
                    }
                }
                else
                {
                    if (calltype.deles.TryGetValue(function, out caches))
                    {
                        caches.TryGetValue(deletype, out v);
                    }
                }
                return v;
            }
            else
            {
                Dictionary<Type, Delegate> caches = null;
                if (callthis != null)
                {
                    if (!callthis.deles.TryGetValue(function, out caches))
                    {
                        caches = new Dictionary<Type, Delegate>();
                        callthis.deles[function] = caches;
                    }

                    caches[deletype] = dele;
                }
                else
                {
                    if (!calltype.deles.TryGetValue(function, out caches))
                    {
                        caches = new Dictionary<Type, Delegate>();
                        calltype.deles[function] = caches;
                    }

                    caches[deletype] = dele;

                }
                return dele;
            }

        }
    }

Usage Example

        public Delegate CreateDelegate(ICLS_Environment env, DeleFunction delefunc)
        {
            DeleFunction _func = delefunc;
            Delegate     _dele = delefunc.cacheFunction(null);

            if (_dele != null)
            {
                return(_dele);
            }
            NonVoidDelegate dele = delegate(T param0, T1 param1, T2 param2) {
                var func = _func.calltype.functions[_func.function];
                if (func.expr_runtime != null)
                {
                    CLS_Content content = new CLS_Content(env);

                    content.DepthAdd();
                    content.CallThis = _func.callthis;
                    content.CallType = _func.calltype;
                    content.function = _func.function;

                    content.DefineAndSet(func._paramnames[0], func._paramtypes[0].type, param0);
                    content.DefineAndSet(func._paramnames[1], func._paramtypes[1].type, param1);
                    content.DefineAndSet(func._paramnames[2], func._paramtypes[2].type, param2);

                    CLS_Content.Value retValue = func.expr_runtime.ComputeValue(content);
                    content.DepthRemove();

                    return((ReturnType)retValue.value);
                }
                return(default(ReturnType));
            };

            _dele = Delegate.CreateDelegate(this.type, dele.Target, dele.Method);
            return(delefunc.cacheFunction(_dele));
        }
All Usage Examples Of CSLE.DeleFunction::cacheFunction