Skip to content

Reflection

Evgeny Vashchenko edited this page Jan 27, 2023 · 6 revisions

Reflection

The static Reflector class from namespace PowerLib.System.Reflection implements methods for both getting and setting field and property values, and calling methods or constructors using reflection. The peculiarity of this functionality is that the search for the desired member (field, property, method, class) is performed by its name, access specifiers and the signature of the types of parameters and arguments, as well as by the value for fields and properties or the return value for methods. All methods are divided into several categories. The first category is determined by where the member is defined: instance or type. To work with static members, the type is used as the first parameter or generic method argument. To work with instance members, an instance of the required type specified by the first parameter is used. The second category determines whether the method must be performed on the member. If a required member is not found or the required functionality is not available for direct methods an exception is thrown. Methods with optional performing return a Boolean value indicating the success of the required operation, and their name begins with the Try prefix. The name of the method indicates what type of member it works with (Field, Property, Method, Constructor or Event). All member access methods require the MemberAccessibility enum parameter to be set, which specifies flags that specify how the required member is to be found:

IgnoreCase - specifies that the case of the name should not be considered when member or parameter searching;
DeclaredOnly - specifies that only members declared at the level of the supplied type's hierarchy should be considered. Inherited members are not considered;
FlattenHierarchy - specifies that public and protected static members up the hierarchy should be returned. Private static members in inherited classes are not returned;
TopHierarchy - specifies that if multiple members are found by the given condition, the member from the top level of the inheritance hierarchy should be returned instead of generating an ambiguous error. If the members are at the same level, then an ambiguous error is always generated.;
Family - specifies that members with family access are to be included in the search;
Assembly - specifies that members with assembly access are to be included in the search;
FamilyOrAssembly - specifies that members with family or assembly access are to be included in the search;
FamilyAndAssembly - specifies that members with family and assembly access are to be included in the search;
Private - specifies that private members are to be included in the search;
Public - specifies that public members are to be included in the search;
NonPublic - specifies that non-public members are to be included in the search;
AnyAccess - specifies that any access members are to be included in the search.

Also, for all members except for constructors, it is required to specify its name.

All member methods allow a typed stub value of the TypedValue type, in which, along with the value, its type is specified. A Type can be a real Value type, any of its base types, or any interface it implements.

For static type members with generic arguments, they can be specified in the typeArguments parameter. This list is required when specifying a generic type definition as the type containing the required member. The length of this list must be equal to the number of generic type arguments. Although the values of the arguments that can be specified via the parameters or the specified value or type of the member can be omitted by padding its position with a null value. For members of generic methods, arguments can be specified in the methodArguments parameter. If the type of the argument can be inferred from the parameters or the return value, then the value at the corresponding position can be filled with a null value. Passing empty lists in the above parameters indicates that the type or method is not generic. If the above argument lists are not specified, then control over this parameter is passed to the framework.

For method members, constructors, and indexed properties, it is possible to set parameter values in two collections. The positionalParameterValues list contains the values of the positional parameters. The namedParameterValues dictionary contains the values of the named parameters. Parameters with default values may not be specified. If any parameters in the original method are returned or passed by reference, then, accordingly, after the method call, there will be new values in the position of these parameters of the corresponding collections.

Methods that make asynchronous calls of other methods have the Async suffix and allow any awaitable objects to be returned by the called methods (not just Task and ValueTask). When specifying a return value filter, you must specify the result value of the expecting result type, not the expecting type itself. Those. if the method returns ValueTask<int> then the type int must be specified as the return value.

The event handler cleanup and raise methods have an eventHandlerResolver delegate parameter. It is used in case of custom implementation of event handlers and must return a delegate of these event handlers. If this parameter is not specified, the standard storage of the handler delegate in a private field is assumed.

There are several types of methods that call event handlers:

  1. Synchronous call of normal (synchronous) event handlers.
  2. Asynchronous call of normal (synchronous) event handlers. Each handler is run asynchronously in a task that is generated by the TaskFactory class. After starting all tasks, an asynchronous waiting for their completion is performed. This type of method has the Async suffix and the TaskFactory class parameter, if not specified, the Task.Factory instance is used by default.
  3. Asynchronous call of any awaitable handlers. Events with such handlers cannot be called in the usual way. To activate them, you need to customize their implementation.

Reflector can generate two expected errors: a member may not be found, or it may be found ambiguously.

  • Methods to work with fields

    • Methods for instance fields

      • Try methods

        Get info methods
        public static bool TryGetField(object source, string name, MemberAccessibility memberAccessibility, Type? valueType, out FieldInfo? fieldInfo);
        
        public static bool TryGetField<TValue>(object source, string name, MemberAccessibility memberAccessibility, out FieldInfo? fieldInfo);
        
        public static bool TryGetField<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType, out FieldInfo? fieldInfo);
        
        public static bool TryGetField<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, out FieldInfo? fieldInfo);
        Get value methods
        public static bool TryGetFieldValue(object source, string name, MemberAccessibility memberAccessibility, Type? valueType, out object? value);
        
        public static bool TryGetFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, out TValue? value);
        
        public static bool TryGetFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType, out object? value);
        
        public static bool TryGetFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, out TValue? value);
        Set value methods
        public static bool TrySetFieldValue(object source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static bool TrySetFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? value);
        
        public static bool TrySetFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static bool TrySetFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static bool TryReplaceFieldValue(object source, string name, MemberAccessibility memberAccessibility, object? newValue, out object? oldValue);
        
        public static bool TryReplaceFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? newValue, out TValue? oldValue);
        
        public static bool TryReplaceFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? newValue, out object? oldValue);
        
        public static bool TryReplaceFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? newValue, out TValue? oldValue);
        Exchange value methods
        public static bool TryExchangeFieldValue(object source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static bool TryExchangeFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
        
        public static bool TryExchangeFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static bool TryExchangeFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
      • Direct methods

        Get info methods
        public static FieldInfo GetField(object source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static FieldInfo GetField<TValue>(object source, string name, MemberAccessibility memberAccessibility);
        
        public static FieldInfo GetField<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static FieldInfo GetField<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility);
        Get value methods
        public static object? GetFieldValue(object source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static TValue? GetFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility);
        
        public static object? GetFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static TValue? GetFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility);
        Set value methods
        public static void SetFieldValue(object source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static void SetFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? value);
        
        public static void SetFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static void SetFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static object? ReplaceFieldValue(object source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static TValue? ReplaceFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? value);
        
        public static object? ReplaceFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static TValue? ReplaceFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? value);
        Exchange value methods
        public static void ExchangeFieldValue(object source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static void ExchangeFieldValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
        
        public static void ExchangeFieldValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static void ExchangeFieldValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
    • Methods for static fields

      • Try methods

        Get info methods
        public static bool TryGetField(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType, out FieldInfo? fieldInfo);
        
        public static bool TryGetField<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, out FieldInfo? fieldInfo);
        
        public static bool TryGetField<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType, out FieldInfo? fieldInfo);
        
        public static bool TryGetField<TSource, TValue>(string name, MemberAccessibility memberAccessibility, out FieldInfo? fieldInfo);
        Get value methods
        public static bool TryGetFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType, out object? value);
        
        public static bool TryGetFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, out TValue? value);
        
        public static bool TryGetFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType, out object? value);
        
        public static bool TryGetFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, out TValue? value);
        Set value methods
        public static bool TrySetFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? value);
        
        public static bool TrySetFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? value);
        
        public static bool TrySetFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, object? value);
        
        public static bool TrySetFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static bool TryReplaceFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? newValue, out object? oldValue);
        
        public static bool TryReplaceFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? newValue, out TValue? oldValue);
        
        public static bool TryReplaceFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, object? newValue, out object? oldValue);
        
        public static bool TryReplaceFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? newValue, out TValue? oldValue);
        Exchange value methods
        public static bool TryExchangeFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref object? value);
        
        public static bool TryExchangeFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref TValue? value);
        
        public static bool TryExchangeFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static bool TryExchangeFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, ref TValue? value);
      • Direct methods

        Get info methods
        public static FieldInfo GetField(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType);
        
        public static FieldInfo GetField<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments);
        
        public static FieldInfo GetField<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static FieldInfo GetField<TSource, TValue>(string name, MemberAccessibility memberAccessibility);
        Get value methods
        public static object? GetFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType);
        
        public static TValue? GetFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments);
        
        public static object? GetFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static TValue? GetFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility);
        Set value methods
        public static void SetFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? value);
        
        public static void SetFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? value);
        
        public static void SetFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, object? value);
        
        public static void SetFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static object? ReplaceFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? value);
        
        public static TValue? ReplaceFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? value);
        
        public static object? ReplaceFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, object? value);
        
        public static TValue? ReplaceFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? value);
        Exchange value methods
        public static void ExchangeFieldValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref object? value);
        
        public static void ExchangeFieldValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref TValue? value);
        
        public static void ExchangeFieldValue<TSource>(string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static void ExchangeFieldValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, ref TValue? value);
  • Methods to work with properties

    • Methods for instance properties without indices

      • Try methods

        Get info methods
        public static bool TryGetProperty(object source, string name, MemberAccessibility memberAccessibility, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TValue>(object source, string name, MemberAccessibility memberAccessibility, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, out PropertyInfo? propertyInfo);
        Get value methods
        public static bool TryGetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, out TValue? value);
        
        public static bool TryGetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, out TValue? value);
        Set value methods
        public static bool TrySetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static bool TrySetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? value);
        
        public static bool TrySetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static bool TrySetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static bool TryReplacePropertyValue(object source, string name, MemberAccessibility memberAccessibility, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? newValue, out TValue? oldValue);
        
        public static bool TryReplacePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? newValue, out TValue? oldValue);
        Exchange value methods
        public static bool TryExchangePropertyValue(object source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static bool TryExchangePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
        
        public static bool TryExchangePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static bool TryExchangePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
      • Direct methods

        Get info methods
        public static PropertyInfo GetProperty(object source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static PropertyInfo GetProperty<TValue>(object source, string name, MemberAccessibility memberAccessibility);
        
        public static PropertyInfo GetProperty<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static PropertyInfo GetProperty<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility);
        Get value methods
        public static object? GetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static TValue? GetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility);
        
        public static object? GetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static TValue? GetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility);
        Set value methods
        public static void SetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static void SetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? value);
        
        public static void SetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static void SetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static object? ReplacePropertyValue(object source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static TValue? ReplacePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, TValue? value);
        
        public static object? ReplacePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, object? value);
        
        public static TValue? ReplacePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, TValue? value);
        Exchange value methods
        public static void ExchangePropertyValue(object source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static void ExchangePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
        
        public static void ExchangePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static void ExchangePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, ref TValue? value);
    • Methods for instance properties with indices

      • Try methods

        Get info methods
        public static bool TryGetProperty(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out PropertyInfo? propertyInfo);
        Get value methods
        public static bool TryGetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out TValue? value);
        
        public static bool TryGetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out TValue? value);
        Set value methods
        public static bool TrySetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static bool TrySetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        
        public static bool TrySetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static bool TrySetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        Replace value methods
        public static bool TryReplacePropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? newValue, out TValue? oldValue);
        
        public static bool TryReplacePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? newValue, out TValue? oldValue);
        Exchange value methods
        public static bool TryExchangePropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static bool TryExchangePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
        
        public static bool TryExchangePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static bool TryExchangePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
      • Direct methods

        Get info methods
        public static PropertyInfo GetProperty(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static PropertyInfo GetProperty<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        
        public static PropertyInfo GetProperty<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static PropertyInfo GetProperty<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        Get value methods
        public static object? GetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static TValue? GetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        
        public static object? GetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static TValue? GetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        Set value methods
        public static void SetPropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static void SetPropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        
        public static void SetPropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static void SetPropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        Replace value methods
        public static object? ReplacePropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static TValue? ReplacePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        
        public static object? ReplacePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static TValue? ReplacePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        Exchange value methods
        public static void ExchangePropertyValue(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static void ExchangePropertyValue<TValue>(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
        
        public static void ExchangePropertyValue<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static void ExchangePropertyValue<TSource, TValue>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
    • Methods for static properties without indices

      • Try methods

        Get info methods
        public static bool TryGetProperty(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource, TValue>(string name, MemberAccessibility memberAccessibility, out PropertyInfo? propertyInfo);
        Get value methods
        public static bool TryGetPropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, out TValue? value);
        
        public static bool TryGetPropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, out TValue? value);
        Set value methods
        public static bool TrySetPropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? value);
        
        public static bool TrySetPropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? value);
        
        public static bool TrySetPropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, object? value);
        
        public static bool TrySetPropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static bool TryReplacePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? newValue, out TValue? oldValue);
        
        public static bool TryReplacePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? newValue, out TValue? oldValue);
        Exchange value methods
        public static bool TryExchangePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref object? value);
        
        public static bool TryExchangePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref TValue? value);
        
        public static bool TryExchangePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static bool TryExchangePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, ref TValue? value);
      • Direct methods

        Get info methods
        public static PropertyInfo GetProperty(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType);
        
        public static PropertyInfo GetProperty<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments);
        
        public static PropertyInfo GetProperty<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static PropertyInfo GetProperty<TSource, TValue>(string name, MemberAccessibility memberAccessibility);
        Get value methods
        public static object? GetPropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, Type? valueType);
        
        public static TValue? GetPropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments);
        
        public static object? GetPropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, Type? valueType);
        
        public static TValue? GetPropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility);
        Set value methods
        public static void SetPropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? value);
        
        public static void SetPropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? value);
        
        public static void SetPropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, object? value);
        
        public static void SetPropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? value);
        Replace value methods
        public static object? ReplacePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, object? value);
        
        public static TValue? ReplacePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, TValue? value);
        
        public static object? ReplacePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, object? value);
        
        public static TValue? ReplacePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, TValue? value);
        Exchange value methods
        public static void ExchangePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref object? value);
        
        public static void ExchangePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, ref TValue? value);
        
        public static void ExchangePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, ref object? value);
        
        public static void ExchangePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, ref TValue? value);
    • Methods for static properties with indices

      • Try methods

        Get info methods
        public static bool TryGetProperty(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? valueType, out PropertyInfo? propertyInfo);
        
        public static bool TryGetProperty<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out PropertyInfo? propertyInfo);
        Get value methods
        public static bool TryGetPropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out TValue? value);
        
        public static bool TryGetPropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType, out object? value);
        
        public static bool TryGetPropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out TValue? value);
        Set value methods
        public static bool TrySetProperty(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static bool TrySetProperty<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        
        public static bool TrySetProperty<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static bool TrySetProperty<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        Replace value methods
        public static bool TryReplacePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? newValue, out TValue? oldValue);
        
        public static bool TryReplacePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? newValue, out object? oldValue);
        
        public static bool TryReplacePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? newValue, out TValue? oldValue);
        Exchange value methods
        public static bool TryExchangePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static bool TryExchangePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
        
        public static bool TryExchangePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static bool TryExchangePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
      • Direct methods

        Get info methods
        public static PropertyInfo GetProperty(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static PropertyInfo GetProperty<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        
        public static PropertyInfo GetProperty<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static PropertyInfo GetProperty<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        Get value methods
        public static object? GetPropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static TValue? GetPropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        
        public static object? GetPropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, Type? valueType);
        
        public static TValue? GetPropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
        Set value methods
        public static void SetPropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static void SetPropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        
        public static void SetPropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static void SetPropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        Replace value methods
        public static object? ReplacePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static TValue? ReplacePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        
        public static object? ReplacePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, object? value);
        
        public static TValue? ReplacePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, TValue? value);
        Exchange value methods
        public static void ExchangePropertyValue(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static void ExchangePropertyValue<TValue>(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
        
        public static void ExchangePropertyValue<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref object? value);
        
        public static void ExchangePropertyValue<TSource, TValue>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, ref TValue? value);
  • Methods to work with methods

    • Methods for instance methods

      • Try methods

        Get info methods
        public static bool TryGetMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out MethodInfo? methodInfo);
        
        public static bool TryGetMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out MethodInfo? methodInfo);
        
        public static bool TryGetMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out MethodInfo? methodInfo);
        
        public static bool TryGetMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out MethodInfo? methodInfo);
        Call methods
        public static bool TryCallMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static bool TryCallMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue);
        
        public static bool TryCallMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static bool TryCallMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue);
        Call asynchronous methods
        public static async Task<bool> TryCallMethodAsync(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<TryOut<object>> TryCallMethodAsync(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        
        public static async Task<bool> TryCallMethodAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<TryOut<object>> TryCallMethodAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
      • Direct methods

        Get info methods
        public static MethodInfo GetMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static MethodInfo GetMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static MethodInfo GetMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static MethodInfo GetMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Call methods
        public static void CallMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static object? CallMethod(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        
        public static void CallMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static object? CallMethod<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        Call asynchronous methods
        public static Task CallMethodAsync(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<object?> CallMethodAsync(object source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        
        public static Task CallMethodAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<object?> CallMethodAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
    • Methods for static methods

      • Try methods

        Get info methods
        public static bool TryGetMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out MethodInfo? methodInfo);
        
        public static bool TryGetMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out MethodInfo? methodInfo);
        
        public static bool TryGetMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out MethodInfo? methodInfo);
        
        public static bool TryGetMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out MethodInfo? methodInfo);
        Call methods
        public static bool TryCallMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static bool TryCallMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue);
        
        public static bool TryCallMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static bool TryCallMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue);
        Call asynchronous methods
        public static async Task<bool> TryCallMethodAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<TryOut<object>> TryCallMethodAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        
        public static async Task<bool> TryCallMethodAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<TryOut<object>> TryCallMethodAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
      • Direct methods

        Get info methods
        public static MethodInfo GetMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static MethodInfo GetMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static MethodInfo GetMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static MethodInfo GetMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Call methods
        public static void CallMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static object? CallMethod(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        
        public static void CallMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static object? CallMethod<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        Call asynchronous methods
        public static Task CallMethodAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<object?> CallMethodAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
        
        public static Task CallMethodAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues);
        
        public static Task<object?> CallMethodAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<Type?>? methodArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType);
  • Methods to work with constructors

    • Try methods

      Get info methods
      public static bool TryGetInstanceConstructor(Type sourceType, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out ConstructorInfo? constructorInfo);
      
      public static bool TryGetInstanceConstructor<TSource>(MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out ConstructorInfo? constructorInfo);
      Construct methods
      public static bool TryConstructInstance(Type sourceType, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out object? constructedValue);
      
      public static bool TryConstructInstance<TSource>(MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues, out object? constructedValue);
    • Direct methods

      Get info methods
      public static ConstructorInfo GetInstanceConstructor(Type sourceType, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
      
      public static ConstructorInfo GetInstanceConstructor<TSource>(MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
      Construct methods
      public static object ConstructInstance(Type sourceType, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
      
      public static object ConstructInstance<TSource>(MemberAccessibility memberAccessibility, IReadOnlyList<object?>? positionalParameterValues, IReadOnlyDictionary<string, object?>? namedParameterValues);
  • Methods to work with events

    • Methods for instance events

      • Try methods

        Get info methods
        public static bool TryGetEvent(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out EventInfo? eventInfo);
        
        public static bool TryGetEvent(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out EventInfo? eventInfo);
        
        public static bool TryGetEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out EventInfo? eventInfo);
        
        public static bool TryGetEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out EventInfo? eventInfo);
        Add handler methods
        public static bool TryAddEventHandler( object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Remove handler methods
        public static bool TryRemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Clear handlers methods
        public static bool TryClearEventHandlers(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryClearEventHandlers(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryClearEventHandlers<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryClearEventHandlers<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        Raise handler methods
        public static bool TryRaiseEvent(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryRaiseEvent(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryRaiseEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryRaiseEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        Raise synchronous handler methods asynchronously (for sync handlers only)
        public static async Task<bool> TryRaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static async Task<bool> TryRaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        Raise asynchronous handler methods (for async handlers only)
        public static async Task<bool> TryRaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static async Task<bool> TryRaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
      • Direct methods

        Get info methods
        public static EventInfo GetEvent(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static EventInfo GetEvent(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static EventInfo GetEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static EventInfo GetEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Add handler methods
        public static void AddEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Remove handler methods
        public static void RemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler(object eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TMethodSource>(object eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(TEventSource eventSource, string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Clear handlers methods
        public static void ClearEventHandlers(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static void ClearEventHandlers(object source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static void ClearEventHandlers<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static void ClearEventHandlers<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        Raise handler methods
        public static void RaiseEvent(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static object? RaiseEvent(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, object, Delegate?>? eventHandlerResolver);
        
        public static void RaiseEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static object? RaiseEvent<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        Raise synchronous handler methods asynchronously (for sync handlers only)
        public static Task RaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static Task RaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        Raise asynchronous handler methods (for async handlers only)
        public static async Task RaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync(object source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, object, Delegate?>? eventHandlerResolver = null);
        
        public static async Task RaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync<TSource>(TSource source, string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, TSource, Delegate?>? eventHandlerResolver = null);
    • Methods for static events

      • Try methods

        Get info methods
        public static bool TryGetEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out EventInfo? eventInfo);
        
        public static bool TryGetEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out EventInfo? eventInfo);
        
        public static bool TryGetEvent<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, out EventInfo? eventInfo);
        
        public static bool TryGetEvent<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, out EventInfo? eventInfo);
        Add handler methods
        public static bool TryAddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryAddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Remove handler methods
        public static bool TryRemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static bool TryRemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Clear handlers methods
        public static bool TryClearEventHandlers(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryClearEventHandlers(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryClearEventHandlers<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryClearEventHandlers<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        Raise handler methods
        public static bool TryRaiseEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryRaiseEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryRaiseEvent<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static bool TryRaiseEvent<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, out object? returnValue, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        Raise synchronous handler methods asynchronously (for sync handlers only)
        public static async Task<bool> TryRaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static async Task<bool> TryRaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        Raise asynchronous handler methods (for async handlers only)
        public static async Task<bool> TryRaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static async Task<bool> TryRaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<TryOut<object>> TryRaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
      • Direct methods

        Get info methods
        public static EventInfo GetEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static EventInfo GetEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static EventInfo GetEvent<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static EventInfo GetEvent<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Add handler methods
        public static void AddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void AddEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Remove handler methods
        public static void RemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TMethodSource>(Type eventType, string eventName, MemberAccessibility eventAccessibility, IList<Type?>? eventTypeArguments, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, object methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource>(string eventName, MemberAccessibility eventAccessibility, Type methodType, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodTypeArguments, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, TMethodSource methodSource, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes);
        
        public static void RemoveEventHandler<TEventSource, TMethodSource>(string eventName, MemberAccessibility eventAccessibility, string methodName, MemberAccessibility methodAccessibility, IList<Type?>? methodMethodArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType);
        Clear handlers methods
        public static void ClearEventHandlers(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static void ClearEventHandlers(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static void ClearEventHandlers<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static void ClearEventHandlers<TSource>(string name, MemberAccessibility memberAccessibility, IReadOnlyList<Type?>? positionalParameterTypes, IReadOnlyDictionary<string, Type?>? namedParameterTypes, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        Raise handler methods
        public static void RaiseEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static object? RaiseEvent(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static void RaiseEvent<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static object? RaiseEvent<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        Raise synchronous handler methods asynchronously (for sync handlers only)
        public static Task RaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task RaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, TaskFactory? taskFactory, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        Raise asynchronous handler methods (for async handlers only)
        public static Task RaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync(Type sourceType, string name, MemberAccessibility memberAccessibility, IList<Type?>? typeArguments, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task RaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
        
        public static Task<object?> RaiseEventAsync<TSource>(string name, MemberAccessibility memberAccessibility, IList<object?>? positionalParameterValues, IDictionary<string, object?>? namedParameterValues, Type? returnType, Func<EventInfo, Delegate?>? eventHandlerResolver = null);
Example
using System;
using System.Collections.Generic;
using PowerLib.System.Reflection;

namespace ReflectorTestApp;

internal class A<T>
{
  protected readonly T _default;

  protected A(T value)
  {
    _default = value;
  }
}

internal class B<T> : A<T>
{
  protected B(T value)
    : base(value)
  { }

  public B()
    : base(default)
  { }

  public T Default
    => _default;

  public void AddItem<L>(L list, T item)
    where L : IList<T>
    => list.Add(item is null ? Default : item);

  public void GetItem<L>(L list, int index, out T result)
    where L : IList<T>
    => result = list[index];

  private bool ExchangeItem<L>(L list, int index, ref T item, bool reserved = false, bool skipOutOfRange = false)
    where L : List<T>
  {
    if (skipOutOfRange && index >= list.Count)
      return false;
    var curr = list[index];
    list[index] = item;
    item = curr;
    return true;
  }
}

internal static class ReflectorTest
{
  internal static void Test()
  {
    var list = new List<double>();

    //  Create instance of class B<T>.
    var posParams_1 = new object[] { 99.5d };
    var typeArgs_1 = new Type[] { null };
    var inst_B = Reflector.Construct(typeof(B<>), MemberAccessibility.Family, typeArgs_1, posParams_1, null);
    //var inst_B = Reflector.Construct(typeof(B<double>), MemberAccessibility.Family, null, posParams_1, null);
    //var inst_B = Reflector.Construct<B<double>>(MemberAccessibility.Family, null, posParams_1, null);
    //var inst_B = Reflector.Construct(typeof(B<>), MemberAccessibility.Public, new[] { typeof(double) }, null, null);
    //var inst_B = Reflector.Construct(typeof(B<double>), MemberAccessibility.Public, null, null, null);
    // inst_B instance of B<double>, typeArgs_1[0] == typeof(double)

    //  Add value 678.99d to empty list.
    var posParams_2 = new object?[] { list, 678.99d };
    Reflector.CallMethod(inst_B, "AddItem", MemberAccessibility.Public, null, posParams_2, null);
    // list[0] == 678.99

    // Get list item at index 0 via output parameter and detect method argument type.
    var posParams_3 = new object[] { list, 0, null };
    var methodArgs_3 = new Type[] { null };
    Reflector.CallMethod(inst_B, "GetItem", MemberAccessibility.Public, methodArgs_3, posParams_3, null);
    // methodArgs_3[0] == typeof(List<double>), posParams_3[2] == 678.99

    // Exchange list item at index 0 via value reference.
    var posParams_4 = new object[] { list, 0, -56789.1234d };
    var namedParams_4 = new Dictionary<string, object>() { { "SKIPOUTOFRANGE", true } };
    var result_4 = Reflector.CallMethod(inst_B, "ExchangeITEM", MemberAccessibility.Private | MemberAccessibility.IgnoreCase, null, posParams_4, namedParams_4, typeof(bool));
    //var result_4 = Reflector.CallMethod(inst_B, "ExchangeITEM", MemberAccessibility.Private | MemberAccessibility.IgnoreCase, null, posParams_4, namedParams_4, null);
    // result_4 == true, posParams_4[2] == 678.99, list[0] == -56789.1234

    //  Get internal '_default' field and 'Default' property.
    var field_5 = Reflector.GetField(inst_B, "_default", MemberAccessibility.Family, null);
    var prop_5 = Reflector.GetProperty<double>(inst_B, "Default", MemberAccessibility.Public);
    // field_5 == 99.5, prop_5 == 99.5
  }
}