You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
256 lines
5.5 KiB
256 lines
5.5 KiB
4 years ago
|
#if !UNITY_METRO
|
||
|
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using System.Reflection;
|
||
|
using System.Reflection.Emit;
|
||
|
using System.Text;
|
||
|
|
||
|
namespace System.Reflection
|
||
|
{
|
||
|
#if !NET_4_6
|
||
|
|
||
|
public class TypeInfo
|
||
|
{
|
||
|
readonly Type type;
|
||
|
|
||
|
public TypeInfo(Type type)
|
||
|
{
|
||
|
this.type = type;
|
||
|
}
|
||
|
|
||
|
public string Name
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.Name;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public TypeAttributes Attributes
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.Attributes;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsClass
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsClass;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsPublic
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsPublic;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsInterface
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsInterface;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsAbstract
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsAbstract;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsValueType
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsValueType;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsNestedPublic
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsNestedPublic;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public IEnumerable<ConstructorInfo> DeclaredConstructors
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.GetConstructors().AsEnumerable();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsGenericType
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsGenericType;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Type GetGenericTypeDefinition()
|
||
|
{
|
||
|
return type.GetGenericTypeDefinition();
|
||
|
}
|
||
|
|
||
|
public Type AsType()
|
||
|
{
|
||
|
return type;
|
||
|
}
|
||
|
|
||
|
public MethodInfo GetDeclaredMethod(string name)
|
||
|
{
|
||
|
return type.GetMethod(name);
|
||
|
}
|
||
|
|
||
|
public IEnumerable<MethodInfo> GetDeclaredMethods(string name)
|
||
|
{
|
||
|
return type.GetMethods().Where(x => x.Name == name);
|
||
|
}
|
||
|
|
||
|
public Type[] GenericTypeArguments
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.GetGenericArguments();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsEnum
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.IsEnum;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool IsConstructedGenericType()
|
||
|
{
|
||
|
return type.IsGenericType && !type.IsGenericTypeDefinition;
|
||
|
}
|
||
|
|
||
|
public Type[] ImplementedInterfaces
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return type.GetInterfaces();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public MethodInfo[] GetRuntimeMethods()
|
||
|
{
|
||
|
return type.GetMethods();
|
||
|
}
|
||
|
|
||
|
public PropertyInfo GetDeclaredProperty(string name)
|
||
|
{
|
||
|
return type.GetProperty(name);
|
||
|
}
|
||
|
|
||
|
public T GetCustomAttribute<T>(bool inherit = true)
|
||
|
where T : Attribute
|
||
|
{
|
||
|
return type.GetCustomAttributes(inherit).OfType<T>().FirstOrDefault();
|
||
|
}
|
||
|
public IEnumerable<T> GetCustomAttributes<T>(bool inherit = true)
|
||
|
where T : Attribute
|
||
|
{
|
||
|
return type.GetCustomAttributes(inherit).OfType<T>();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
public static class ReflectionExtensions
|
||
|
{
|
||
|
|
||
|
#if !NET_4_6
|
||
|
|
||
|
public static TypeInfo GetTypeInfo(this Type type)
|
||
|
{
|
||
|
return new TypeInfo(type);
|
||
|
}
|
||
|
|
||
|
public static TypeInfo CreateTypeInfo(this TypeBuilder type)
|
||
|
{
|
||
|
return new TypeInfo(type.CreateType());
|
||
|
}
|
||
|
|
||
|
public static MethodInfo GetRuntimeMethod(this Type type, string name, Type[] types)
|
||
|
{
|
||
|
return type.GetMethod(name, types);
|
||
|
}
|
||
|
|
||
|
public static MethodInfo GetRuntimeMethod(this Type type, string name)
|
||
|
{
|
||
|
return type.GetMethod(name);
|
||
|
}
|
||
|
|
||
|
public static MethodInfo[] GetRuntimeMethods(this Type type)
|
||
|
{
|
||
|
return type.GetMethods();
|
||
|
}
|
||
|
|
||
|
public static PropertyInfo GetRuntimeProperty(this Type type, string name)
|
||
|
{
|
||
|
return type.GetProperty(name);
|
||
|
}
|
||
|
|
||
|
public static PropertyInfo[] GetRuntimeProperties(this Type type)
|
||
|
{
|
||
|
return type.GetProperties();
|
||
|
}
|
||
|
|
||
|
public static FieldInfo GetRuntimeField(this Type type, string name)
|
||
|
{
|
||
|
return type.GetField(name);
|
||
|
}
|
||
|
|
||
|
public static FieldInfo[] GetRuntimeFields(this Type type)
|
||
|
{
|
||
|
return type.GetFields();
|
||
|
}
|
||
|
|
||
|
public static T GetCustomAttribute<T>(this FieldInfo type, bool inherit)
|
||
|
where T : Attribute
|
||
|
{
|
||
|
return type.GetCustomAttributes(inherit).OfType<T>().FirstOrDefault();
|
||
|
}
|
||
|
|
||
|
public static T GetCustomAttribute<T>(this PropertyInfo type, bool inherit)
|
||
|
where T : Attribute
|
||
|
{
|
||
|
return type.GetCustomAttributes(inherit).OfType<T>().FirstOrDefault();
|
||
|
}
|
||
|
|
||
|
public static T GetCustomAttribute<T>(this ConstructorInfo type, bool inherit)
|
||
|
where T : Attribute
|
||
|
{
|
||
|
return type.GetCustomAttributes(inherit).OfType<T>().FirstOrDefault();
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
public static bool IsConstructedGenericType(this TypeInfo type)
|
||
|
{
|
||
|
return type.IsConstructedGenericType;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif
|