12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- using System;
- using System.Reflection;
-
- namespace UnityEngine.UI.Tests
- {
- class PrivateFieldSetter<T> : IDisposable
- {
- private object m_Obj;
- private FieldInfo m_FieldInfo;
- private object m_OldValue;
-
- public PrivateFieldSetter(object obj, string field, object value)
- {
- m_Obj = obj;
- m_FieldInfo = typeof(T).GetField(field, BindingFlags.NonPublic | BindingFlags.Instance);
- m_OldValue = m_FieldInfo.GetValue(obj);
- m_FieldInfo.SetValue(obj, value);
- }
-
- public void Dispose()
- {
- m_FieldInfo.SetValue(m_Obj, m_OldValue);
- }
- }
-
- static class PrivateStaticField
- {
- public static T GetValue<T>(Type staticType, string fieldName)
- {
- var type = staticType;
- FieldInfo field = null;
- while (field == null && type != null)
- {
- field = type.GetField(fieldName, BindingFlags.Static | BindingFlags.NonPublic);
- type = type.BaseType;
- }
- return (T)field.GetValue(null);
- }
- }
-
- static class PrivateField
- {
- public static T GetValue<T>(this object o, string fieldName)
- {
- var type = o.GetType();
- FieldInfo field = null;
- while (field == null && type != null)
- {
- field = type.GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic);
- type = type.BaseType;
- }
- return field != null ? (T)field.GetValue(o) : default(T);
- }
- }
- }
|