/// <summary> /// The get field ex. /// </summary> /// <param name="type">The type.</param> /// <param name="name">The name.</param> /// <param name="bindingFlags">The binding Flags.</param> /// <returns>FieldInfo.</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentException">The <paramref name="name" /> is <c>null</c> or whitespace.</exception> public static FieldInfo GetFieldEx(this Type type, string name, BindingFlags bindingFlags) { Argument.IsNotNull("type", type); Argument.IsNotNullOrWhitespace("name", name); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Field, bindingFlags, name); return(_fieldCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetField(name, bindingFlags))); #else return(type.GetTypeInfo().GetField(name, bindingFlags)); #endif }
/// <summary> /// The get methods ex. /// </summary> /// <param name="type">The type.</param> /// <param name="bindingFlags">The binding Flags.</param> /// <returns>MethodInfo[][].</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> public static MethodInfo[] GetMethodsEx(this Type type, BindingFlags bindingFlags) { Argument.IsNotNull("type", type); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Method, bindingFlags); return(_methodsCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethods(bindingFlags))); #else return(type.GetTypeInfo().GetMethods(bindingFlags)); #endif }
/// <summary> /// The get events ex. /// </summary> /// <param name="type">The type.</param> /// <param name="flattenHierarchy">The flatten Hierarchy.</param> /// <param name="allowStaticMembers">The allow Static Members.</param> /// <returns>EventInfo[][].</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> public static EventInfo[] GetEventsEx(this Type type, bool flattenHierarchy = true, bool allowStaticMembers = false) { Argument.IsNotNull("type", type); BindingFlags bindingFlags = BindingFlagsHelper.GetFinalBindingFlags(flattenHierarchy, allowStaticMembers); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Event, bindingFlags); return(_eventsCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetEvents(bindingFlags))); #else return(type.GetTypeInfo().GetEvents(bindingFlags)); #endif }
/// <summary> /// The get method ex. /// </summary> /// <param name="type">The type.</param> /// <param name="name">The name.</param> /// <param name="bindingFlags">The binding Flags.</param> /// <returns>MethodInfo.</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentException">The <paramref name="name" /> is <c>null</c> or whitespace.</exception> public static MethodInfo GetMethodEx(this Type type, string name, BindingFlags bindingFlags) { Argument.IsNotNull(nameof(type), type); Argument.IsNotNullOrWhitespace(nameof(name), name); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Method, bindingFlags, name); return(_methodCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethod(name, bindingFlags))); #else return(type.GetTypeInfo().GetMethod(name, bindingFlags)); #endif }
/// <summary> /// The get constructors ex. /// </summary> /// <param name="type">The type.</param> /// <returns>ConstructorInfo[][].</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> public static ConstructorInfo[] GetConstructorsEx(this Type type) { Argument.IsNotNull("type", type); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Constructor, BindingFlags.Default, "allctors"); #if NETFX_CORE || PCL return(_constructorsCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().DeclaredConstructors.ToArray())); #else return(_constructorsCache.GetFromCacheOrFetch(cacheKey, type.GetConstructors)); #endif #else #if NETFX_CORE || PCL return(type.GetTypeInfo().DeclaredConstructors.ToArray()); #else return(type.GetConstructors()); #endif #endif }
/// <summary> /// The get constructor ex. /// </summary> /// <param name="type">The type.</param> /// <param name="types">The types.</param> /// <returns>ConstructorInfo.</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentNullException">The <paramref name="types" /> is <c>null</c>.</exception> public static ConstructorInfo GetConstructorEx(this Type type, Type[] types) { Argument.IsNotNull("type", type); Argument.IsNotNull("types", types); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Constructor, BindingFlags.Default, types); #if NETFX_CORE || PCL return(_constructorCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetConstructor(types, BindingFlagsHelper.GetFinalBindingFlags(false, false)))); #else return(_constructorCache.GetFromCacheOrFetch(cacheKey, () => type.GetConstructor(types))); #endif #else #if NETFX_CORE || PCL return(type.GetTypeInfo().GetConstructor(types, BindingFlagsHelper.GetFinalBindingFlags(false, false))); #else return(type.GetConstructor(types)); #endif #endif }
/// <summary> /// The get method ex. /// </summary> /// <param name="type"> /// The type. /// </param> /// <param name="name"> /// The name. /// </param> /// <param name="types"> /// The types. /// </param> /// <param name="bindingFlags"> /// The binding Flags. /// </param> /// <exception cref="System.ArgumentNullException"> /// The <paramref name="type"/> is <c>null</c>. /// </exception> /// <exception cref="System.ArgumentException"> /// The <paramref name="name"/> is <c>null</c> or whitespace. /// </exception> public static MethodInfo GetMethodEx(this Type type, string name, Type[] types, BindingFlags bindingFlags) { Argument.IsNotNull("type", type); Argument.IsNotNullOrWhitespace("name", name); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Method, bindingFlags, new object[] { name, types }); #if NETFX_CORE return(_methodCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethod(name, bindingFlags))); #else return(_methodCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethod(name, bindingFlags, null, types, null))); #endif #else #if WP8 return(type.GetTypeInfo().GetMethod(name, bindingFlags, null, types, null)); #else return(type.GetTypeInfo().GetMethod(name, types, bindingFlags)); #endif #endif }
/// <summary> /// Equalses the specified other. /// </summary> /// <param name="other">The other.</param> /// <returns></returns> protected bool Equals(ReflectionCacheKey other) { return Equals(Type, other.Type) && ReflectionType == other.ReflectionType && BindingFlags == other.BindingFlags && Equals(AdditionalInfo, other.AdditionalInfo) && true; }
/// <summary> /// The get methods ex. /// </summary> /// <param name="type">The type.</param> /// <param name="bindingFlags">The binding Flags.</param> /// <returns>MethodInfo[][].</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> public static MethodInfo[] GetMethodsEx(this Type type, BindingFlags bindingFlags) { Argument.IsNotNull("type", type); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Method, bindingFlags); return _methodsCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethods(bindingFlags)); #else return type.GetTypeInfo().GetMethods(bindingFlags); #endif }
/// <summary> /// The get method ex. /// </summary> /// <param name="type">The type.</param> /// <param name="name">The name.</param> /// <param name="types">The types.</param> /// <param name="bindingFlags">The binding Flags.</param> /// <returns>MethodInfo.</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentException">The <paramref name="name" /> is <c>null</c> or whitespace.</exception> public static MethodInfo GetMethodEx(this Type type, string name, Type[] types, BindingFlags bindingFlags) { Argument.IsNotNull("type", type); Argument.IsNotNullOrWhitespace("name", name); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Method, bindingFlags, new object[] {name, types}); #if NETFX_CORE || PCL return _methodCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethod(name, bindingFlags)); #else return _methodCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethod(name, bindingFlags, null, types, null)); #endif #else #if WP8 return type.GetTypeInfo().GetMethod(name, bindingFlags, null, types, null); #elif PCL return type.GetTypeInfo().GetMethod(name, types); #else return type.GetTypeInfo().GetMethod(name, types, bindingFlags); #endif #endif }
/// <summary> /// The get method ex. /// </summary> /// <param name="type">The type.</param> /// <param name="name">The name.</param> /// <param name="bindingFlags">The binding Flags.</param> /// <returns>MethodInfo.</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentException">The <paramref name="name" /> is <c>null</c> or whitespace.</exception> public static MethodInfo GetMethodEx(this Type type, string name, BindingFlags bindingFlags) { Argument.IsNotNull("type", type); Argument.IsNotNullOrWhitespace("name", name); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Method, bindingFlags, name); return _methodCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetMethod(name, bindingFlags)); #else return type.GetTypeInfo().GetMethod(name, bindingFlags); #endif }
/// <summary> /// The get events ex. /// </summary> /// <param name="type">The type.</param> /// <param name="flattenHierarchy">The flatten Hierarchy.</param> /// <param name="allowStaticMembers">The allow Static Members.</param> /// <returns>EventInfo[][].</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> public static EventInfo[] GetEventsEx(this Type type, bool flattenHierarchy = true, bool allowStaticMembers = false) { Argument.IsNotNull("type", type); BindingFlags bindingFlags = BindingFlagsHelper.GetFinalBindingFlags(flattenHierarchy, allowStaticMembers); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Event, bindingFlags); return _eventsCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetEvents(bindingFlags)); #else return type.GetTypeInfo().GetEvents(bindingFlags); #endif }
/// <summary> /// The get constructors ex. /// </summary> /// <param name="type">The type.</param> /// <returns>ConstructorInfo[][].</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> public static ConstructorInfo[] GetConstructorsEx(this Type type) { Argument.IsNotNull("type", type); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Constructor, BindingFlags.Default, "allctors"); #if NETFX_CORE return _constructorsCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().DeclaredConstructors.ToArray()); #else return _constructorsCache.GetFromCacheOrFetch(cacheKey, type.GetConstructors); #endif #else #if NETFX_CORE return type.GetTypeInfo().DeclaredConstructors.ToArray(); #else return type.GetConstructors(); #endif #endif }
/// <summary> /// The get constructor ex. /// </summary> /// <param name="type">The type.</param> /// <param name="types">The types.</param> /// <returns>ConstructorInfo.</returns> /// <exception cref="System.ArgumentNullException">The <paramref name="type" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentNullException">The <paramref name="types" /> is <c>null</c>.</exception> public static ConstructorInfo GetConstructorEx(this Type type, Type[] types) { Argument.IsNotNull("type", type); Argument.IsNotNull("types", types); #if ENABLE_CACHE var cacheKey = new ReflectionCacheKey(type, ReflectionTypes.Constructor, BindingFlags.Default, types); #if NETFX_CORE return _constructorCache.GetFromCacheOrFetch(cacheKey, () => type.GetTypeInfo().GetConstructor(types, BindingFlagsHelper.GetFinalBindingFlags(false, false))); #else return _constructorCache.GetFromCacheOrFetch(cacheKey, () => type.GetConstructor(types)); #endif #else #if NETFX_CORE return type.GetTypeInfo().GetConstructor(types, BindingFlagsHelper.GetFinalBindingFlags(false, false)); #else return type.GetConstructor(types); #endif #endif }