public AccessOptimizer(GetPropertyValuesInvoker getDelegate, SetPropertyValuesInvoker setDelegate, GetPropertyValueInvoker[] getters, SetPropertyValueInvoker[] setters, GetPropertyValueInvoker specializedGetter, SetPropertyValueInvoker specializedSetter) { this.getDelegate = getDelegate; this.setDelegate = setDelegate; _getters = getters; _setters = setters; _specializedGetter = specializedGetter; _specializedSetter = specializedSetter; getterCallback = GetPropertyValue; setterCallback = SetPropertyValue; }
/// <summary> /// Class constructor. /// </summary> public ReflectionOptimizer( System.Type mappedType, IGetter[] getters, ISetter[] setters, IGetter specializedGetter, ISetter specializedSetter) { // save off references this.mappedType = mappedType; typeOfThis = mappedType.IsValueType ? mappedType.MakeByRefType() : mappedType; //this.getters = getters; //this.setters = setters; GetPropertyValuesInvoker getInvoker = GenerateGetPropertyValuesMethod(getters); SetPropertyValuesInvoker setInvoker = GenerateSetPropertyValuesMethod(setters); var getMethods = new GetPropertyValueInvoker[getters.Length]; for (var i = 0; i < getters.Length; i++) { getMethods[i] = GenerateGetPropertyValueMethod(getters[i]); } var setMethods = new SetPropertyValueInvoker[setters.Length]; for (var i = 0; i < setters.Length; i++) { setMethods[i] = GenerateSetPropertyValueMethod(setters[i]); } accessOptimizer = new AccessOptimizer( getInvoker, setInvoker, getMethods, setMethods, GenerateGetPropertyValueMethod(specializedGetter), GenerateSetPropertyValueMethod(specializedSetter) ); createInstanceMethod = CreateCreateInstanceMethod(mappedType); }