IKVM.Internal.MethodWrapper.Create C# (CSharp) 메소드

Create() 정적인 개인적인 메소드

static private Create ( TypeWrapper declaringType, string name, string sig, MethodBase method, TypeWrapper returnType, TypeWrapper parameterTypes, Modifiers modifiers, MemberFlags flags ) : MethodWrapper
declaringType TypeWrapper
name string
sig string
method MethodBase
returnType TypeWrapper
parameterTypes TypeWrapper
modifiers Modifiers
flags MemberFlags
리턴 MethodWrapper
        internal static MethodWrapper Create(TypeWrapper declaringType, string name, string sig, MethodBase method, TypeWrapper returnType, TypeWrapper[] parameterTypes, Modifiers modifiers, MemberFlags flags)
        {
            Debug.Assert(declaringType != null && name!= null && sig != null && method != null);

            if(declaringType.IsGhost)
            {
                // HACK since our caller isn't aware of the ghost issues, we'll handle the method swapping
                if(method.DeclaringType.IsValueType)
                {
                    Type[] types = new Type[parameterTypes.Length];
                    for(int i = 0; i < types.Length; i++)
                    {
                        types[i] = parameterTypes[i].TypeAsSignatureType;
                    }
                    method = declaringType.TypeAsBaseType.GetMethod(method.Name, types);
                }
            #if !NOEMIT
                return new GhostMethodWrapper(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags);
            #else
                Console.WriteLine("TODO: wire up slow reflected ghost methods");
                return new GhostMethodWrapper(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags);
            #endif
            }
            else if(method is ConstructorInfo)
            {
            #if !NOEMIT
                return new SmartConstructorMethodWrapper(declaringType, name, sig, (ConstructorInfo)method, parameterTypes, modifiers, flags);
            #else
                return new SlowConstructorMethodWrapper(declaringType, name, sig, (ConstructorInfo)method, PrimitiveTypeWrapper.VOID, parameterTypes, modifiers, flags);
            #endif
            }
            else
            {
            #if !NOEMIT
                return new SmartCallMethodWrapper(declaringType, name, sig, (MethodInfo)method, returnType, parameterTypes, modifiers, flags, SimpleOpCode.Call, method.IsStatic ? SimpleOpCode.Call : SimpleOpCode.Callvirt);
            #else
                return new SlowMethodWrapper(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags);
            #endif
            }
        }