internal DynamicInvoke(MethodInfo methodInfo, AccessModifiers access, VisibilityModifiers visibility, InvokeDelegate invokeDelegate) : base(methodInfo) { MethodInfo = methodInfo; InvokeDelegate = invokeDelegate ?? throw new ArgumentNullException(nameof(invokeDelegate)); Access = access; Visibility = visibility; Parameters = methodInfo.GetParameters(); ParameterTypes = Parameters.Select(p => p.ParameterType).ToArray(); ReturnType = methodInfo.ReturnType; }
internal DynamicCtor(Type declaringType, ConstructorInfo constructorInfo, AccessModifiers access, VisibilityModifiers visibility, CtorDelegate ctorDelegate) : base(constructorInfo) { CtorDelegate = ctorDelegate ?? throw new ArgumentNullException(nameof(ctorDelegate)); ConstructorInfo = constructorInfo; Access = access; Visibility = visibility; if (constructorInfo == null) { Parameters = new ParameterInfo[0]; ParameterTypes = Type.EmptyTypes; } else { Parameters = constructorInfo.GetParameters(); ParameterTypes = Parameters.Select(p => p.ParameterType).ToArray(); } }
/// <summary> /// Adds the FieldVisibilityModifier to the VisibilityModifiers List. Replaces another modifier with the same ID. Sorts the new Entry: First alls additive, then all multiplicative modifiers. Calculates the new Visibility value for the Field. /// </summary> /// <param name="visibilityModifier">The modifier to add to the list.</param> private void AddVisibilityModifier(Modifier.FieldVisibilityModifier visibilityModifier) { bool ModIsInserted = false; double visibility = 1; for (int i = 0; i < VisibilityModifiers.Count; i++) { //Is there a modifier with the same ID? Replace it. if (visibilityModifier.ModifierID == VisibilityModifiers[i].ModifierID) { VisibilityModifiers.RemoveAt(i); VisibilityModifiers.Insert(i, visibilityModifier); ModIsInserted = true; } //Insert the additive modifier at the end of all the additive modifiers, if there was no duplicate. if (!ModIsInserted && visibilityModifier.Additive && !VisibilityModifiers[i].Additive) { VisibilityModifiers.Insert(i, visibilityModifier); ModIsInserted = true; } //Insert the modifier, when the end of the list is reached and it wasn't inserted already. if (!ModIsInserted && i == VisibilityModifiers.Count - 1) { VisibilityModifiers.Add(visibilityModifier); ModIsInserted = true; } //If the modifier at position i is Additive, add it. If it is a multiplicator, multiply it. if (VisibilityModifiers[i].Additive) { visibility += VisibilityModifiers[i].Value; } else { visibility *= VisibilityModifiers[i].Value; } } Visibility = visibility; }
internal DynamicSetter(AccessModifiers access, VisibilityModifiers visibility, SetterDelegate setterDelegate) { SetterDelegate = setterDelegate ?? throw new ArgumentNullException(nameof(setterDelegate)); Access = access; Visibility = visibility; }