Skip to content

Instantly share code, notes, and snippets.

@onevcat
Created March 27, 2013 11:47
Show Gist options
  • Save onevcat/5253616 to your computer and use it in GitHub Desktop.
Save onevcat/5253616 to your computer and use it in GitHub Desktop.
Get/Set/Call private things.
//
//
// 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