52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
using System.Reflection;
|
|
using static System.Reflection.BindingFlags;
|
|
|
|
namespace InnovEnergy.Lib.Utils.Reflection;
|
|
|
|
public class Method : Member
|
|
{
|
|
private readonly MethodInfo _MethodInfo;
|
|
private readonly Object? _Instance;
|
|
|
|
public override Boolean IsPublic => _MethodInfo.IsPublic;
|
|
public override Boolean IsPrivate => _MethodInfo.IsPrivate;
|
|
public override Boolean IsStatic => _MethodInfo.IsStatic;
|
|
|
|
public override String Name => _MethodInfo.Name;
|
|
public override Type Type => _MethodInfo.ReturnType;
|
|
|
|
public override IEnumerable<Attribute> Attributes => _MethodInfo.GetCustomAttributes();
|
|
|
|
public IEnumerable<Parameter> Parameters => _MethodInfo
|
|
.GetParameters()
|
|
.Select(i => new Parameter(i));
|
|
|
|
internal Method(Object? instance, MethodInfo fieldInfo)
|
|
{
|
|
_MethodInfo = fieldInfo;
|
|
_Instance = instance;
|
|
}
|
|
|
|
public Object? Invoke(params Object[] parameters)
|
|
{
|
|
return _MethodInfo.Invoke(_Instance, parameters);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public static class Methods
|
|
{
|
|
public static IEnumerable<Method> GetMethods<T>(this T instance) where T : notnull
|
|
{
|
|
return typeof(T)
|
|
.GetMethods(Instance | Static | Public | NonPublic)
|
|
.Select(mi => new Method(mi.IsStatic ? null : instance, mi));
|
|
}
|
|
|
|
public static IEnumerable<Method> OfInstance<T>(T instance) where T : notnull
|
|
{
|
|
return instance.GetMethods();
|
|
}
|
|
} |