public Parameters(ParameterInfo[] parameterInfos, GeneralGetterManager generalGetterManager, GeneralSetterManager generalSetterManager) { this.generalGetterManager = generalGetterManager; length = parameterInfos.Length; typeMasks = new JsValueType[parameterInfos.Length]; types = new Type[parameterInfos.Length]; args = new object[parameterInfos.Length]; argsTranslateFuncs = new GeneralGetter[parameterInfos.Length]; byRefValueSetFuncs = new GeneralSetter[parameterInfos.Length]; byRef = new bool[parameterInfos.Length]; isOut = new bool[parameterInfos.Length]; for (int i = 0; i < parameterInfos.Length; i++) { var parameterInfo = parameterInfos[i]; var parameterType = parameterInfo.ParameterType; if (parameterInfo.IsDefined(typeof(ParamArrayAttribute), false)) { parameterType = parameterType.GetElementType(); hasParamArray = true; } types[i] = parameterType; typeMasks[i] = GeneralGetterManager.GetJsTypeMask(parameterType); argsTranslateFuncs[i] = generalGetterManager.GetTranslateFunc(parameterType); byRef[i] = parameterType.IsByRef; if (parameterType.IsByRef) { byRefValueSetFuncs[i] = generalSetterManager.GetTranslateFunc(parameterType.GetElementType()); } isOut[i] = parameterType.IsByRef && parameterInfo.IsOut && !parameterInfo.IsIn; } }
public OverloadReflectionWrap(MethodBase methodBase, GeneralGetterManager generalGetterManager, GeneralSetterManager generalSetterManager) { parameters = new Parameters(methodBase.GetParameters(), generalGetterManager, generalSetterManager); this.generalGetterManager = generalGetterManager; if (methodBase.IsConstructor) { constructorInfo = methodBase as ConstructorInfo; } else { methodInfo = methodBase as MethodInfo; resultSetter = generalSetterManager.GetTranslateFunc(methodInfo.ReturnType); } }
public OverloadReflectionWrap(MethodBase methodBase, GeneralGetterManager generalGetterManager, GeneralSetterManager generalSetterManager, bool extensionMethod = false) { parameters = new Parameters(methodBase.GetParameters().Skip(extensionMethod ? 1 : 0).ToArray(), generalGetterManager, generalSetterManager); this.generalGetterManager = generalGetterManager; this.extensionMethod = extensionMethod; if (methodBase.IsConstructor) { constructorInfo = methodBase as ConstructorInfo; } else { methodInfo = methodBase as MethodInfo; resultSetter = generalSetterManager.GetTranslateFunc(methodInfo.ReturnType); } }