Created
March 27, 2013 11:47
-
-
Save onevcat/5253616 to your computer and use it in GitHub Desktop.
Get/Set/Call private things.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// | |
// Created by Wang Wei(@onevcat) on 2013-3-27. | |
// Copyright (c) 2013 Kayac. All rights reserved. | |
// | |
using System; | |
using System.Reflection; | |
public static class ObjectPrivate { | |
public static T GetPrivateField<T>(this object obj, string name) | |
{ | |
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; | |
Type type = obj.GetType(); | |
FieldInfo field = type.GetField(name, flags); | |
return (T)field.GetValue(obj); | |
} | |
public static T GetPrivateProperty<T>(this object obj, string name) | |
{ | |
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; | |
Type type = obj.GetType(); | |
PropertyInfo field = type.GetProperty(name, flags); | |
return (T)field.GetValue(obj, null); | |
} | |
public static void SetPrivateField(this object obj, string name, object value) | |
{ | |
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; | |
Type type = obj.GetType(); | |
FieldInfo field = type.GetField(name, flags); | |
field.SetValue(obj, value); | |
} | |
public static void SetPrivateProperty(this object obj, string name, object value) | |
{ | |
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; | |
Type type = obj.GetType(); | |
UnityEngine.Debug.Log(type); | |
PropertyInfo field = type.GetProperty(name, flags); | |
UnityEngine.Debug.Log(field); | |
field.SetValue(obj, value, null); | |
} | |
public static T CallPrivateMethod<T>(this object obj, string name, params object[] param) | |
{ | |
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; | |
Type type = obj.GetType(); | |
MethodInfo method = type.GetMethod(name, flags); | |
return (T)method.Invoke(obj, param); | |
} | |
public static void CallPrivateMethod(this object obj, string name, params object[] param) | |
{ | |
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; | |
Type type = obj.GetType(); | |
MethodInfo method = type.GetMethod(name, flags); | |
method.Invoke(obj, param); | |
} | |
public static T CallPrivateStaticMethod<T>(this Type obj, string name, params object[] param) | |
{ | |
BindingFlags flags = BindingFlags.Static | BindingFlags.NonPublic; | |
MethodInfo method = obj.GetMethod(name, flags); | |
return (T)method.Invoke(obj, param); | |
} | |
public static void CallPrivateStaticMethod(this Type obj, string name, params object[] param) | |
{ | |
BindingFlags flags = BindingFlags.Static | BindingFlags.NonPublic; | |
MethodInfo method = obj.GetMethod(name, flags); | |
method.Invoke(obj, param); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment