ReflectionUtil.cs 1.4 KB

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