public override sealed void SetValue(object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) { #if ENABLE_REFLECTION_TRACE if (ReflectionTrace.Enabled) ReflectionTrace.PropertyInfo_SetValue(this, obj, value, index); #endif if (invokeAttr != BindingFlags.Default || binder != null || culture != null) throw new NotImplementedException(); if (_lazySetterInvoker == null) { MethodHandle setterMethodHandle; if (!GetAccessor(MethodSemanticsAttributes.Setter, out setterMethodHandle)) throw new ArgumentException(); MethodAttributes setterMethodAttributes = setterMethodHandle.GetMethod(_reader).Flags; _lazySetterInvoker = ReflectionCoreExecution.ExecutionEnvironment.GetMethodInvoker(_reader, _contextTypeInfo, setterMethodHandle, Array.Empty<RuntimeTypeInfo>(), this); } Object[] arguments; if (index == null) { arguments = new Object[] { value }; } else { arguments = new Object[index.Length + 1]; for (int i = 0; i < index.Length; i++) { arguments[i] = index[i]; } arguments[index.Length] = value; } _lazySetterInvoker.Invoke(obj, arguments); }
public override sealed object GetValue(object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) { #if ENABLE_REFLECTION_TRACE if (ReflectionTrace.Enabled) ReflectionTrace.PropertyInfo_GetValue(this, obj, index); #endif if (invokeAttr != BindingFlags.Default || binder != null || culture != null) throw new NotImplementedException(); if (_lazyGetterInvoker == null) { MethodHandle getterMethodHandle; if (!GetAccessor(MethodSemanticsAttributes.Getter, out getterMethodHandle)) throw new ArgumentException(); MethodAttributes getterMethodAttributes = getterMethodHandle.GetMethod(_reader).Flags; _lazyGetterInvoker = ReflectionCoreExecution.ExecutionEnvironment.GetMethodInvoker(_reader, _contextTypeInfo, getterMethodHandle, Array.Empty<RuntimeTypeInfo>(), this); } if (index == null) index = Array.Empty<Object>(); return _lazyGetterInvoker.Invoke(obj, index); }