System.Runtime.Remoting.RemotingServices.FindAsyncMethodVersion C# (CSharp) Méthode

FindAsyncMethodVersion() static private méthode

static private FindAsyncMethodVersion ( MethodInfo method, MethodInfo &beginMethod, MethodInfo &endMethod ) : bool
method System.Reflection.MethodInfo
beginMethod System.Reflection.MethodInfo
endMethod System.Reflection.MethodInfo
Résultat bool
        internal static bool FindAsyncMethodVersion(MethodInfo method,
                                                    out MethodInfo beginMethod,
                                                    out MethodInfo endMethod)
        {
            beginMethod = null;
            endMethod = null;
            
            // determine names of Begin/End versions
            String beginName = "Begin" + method.Name;
            String endName = "End" + method.Name;
        
            // determine parameter lists for Begin/End versions
            ArrayList beginParameters = new ArrayList();
            ArrayList endParameters = new ArrayList();

            Type beginReturnType = typeof(IAsyncResult);
            Type endReturnType = method.ReturnType;

            ParameterInfo[] paramList = method.GetParameters();
            foreach (ParameterInfo param in paramList)
            {
                if (param.IsOut)
                    endParameters.Add(param);
                else                    
                if (param.ParameterType.IsByRef)
                { 
                    beginParameters.Add(param);
                    endParameters.Add(param);                    
                }
                else
                {
                    // it's an in parameter
                    beginParameters.Add(param);
                }
            }

            beginParameters.Add(typeof(AsyncCallback));
            beginParameters.Add(typeof(Object));                       
            endParameters.Add(typeof(IAsyncResult));

            // try to match these signatures with the methods on the type
            Type type = method.DeclaringType;
            MethodInfo[] methods = type.GetMethods();

            foreach (MethodInfo mi in methods)
            {
                ParameterInfo[] parameterList = mi.GetParameters();
            
                // see if return value is IAsyncResult
                if (mi.Name.Equals(beginName) &&
                    (mi.ReturnType == beginReturnType) &&
                    CompareParameterList(beginParameters, parameterList))

                {                    
                    beginMethod = mi;
                }
                else 
                if (mi.Name.Equals(endName) &&
                    (mi.ReturnType == endReturnType) &&
                    CompareParameterList(endParameters, parameterList))
                {
                    endMethod = mi;
                }
            }

            if ((beginMethod != null) && (endMethod != null))
                return true;
            else
                return false;
        } // FindAsyncMethodVersion
RemotingServices