ReflectionUtil.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Reflection;
  3. namespace SongBrowserPlugin
  4. {
  5. public static class ReflectionUtil
  6. {
  7. public static void SetPrivateField(object obj, string fieldName, object value)
  8. {
  9. var prop = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
  10. prop.SetValue(obj, value);
  11. }
  12. public static T GetPrivateField<T>(object obj, string fieldName)
  13. {
  14. var prop = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
  15. var value = prop.GetValue(obj);
  16. return (T) value;
  17. }
  18. public static void SetPrivateProperty(object obj, string propertyName, object value)
  19. {
  20. var prop = obj.GetType().GetProperty(propertyName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
  21. prop.SetValue(obj, value, null);
  22. }
  23. public static void InvokePrivateMethod(object obj, string methodName, object[] methodParams)
  24. {
  25. MethodInfo dynMethod = obj.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
  26. dynMethod.Invoke(obj, methodParams);
  27. }
  28. public static object InvokeMethod<T>(this T o, string methodName, params object[] args)
  29. {
  30. var mi = o.GetType().GetMethod(methodName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  31. if (mi != null)
  32. {
  33. return mi.Invoke(o, args);
  34. }
  35. return null;
  36. }
  37. public static object InvokeStaticMethod(Type t, string methodName, params object[] args)
  38. {
  39. var mi = t.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
  40. if (mi != null)
  41. {
  42. return mi.Invoke(obj: null, parameters: args);
  43. }
  44. return null;
  45. }
  46. }
  47. }