反射的小代码段

来源:互联网 发布:ac尼尔森数据报告 编辑:程序博客网 时间:2024/06/06 09:38
 /// <summary>        /// 得到私有字段的值        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="instance"></param>        /// <param name="fieldname"></param>        /// <returns></returns>        public static T GetPrivateField<T>(this object instance, string fieldname)        {            BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;            Type type = instance.GetType();            FieldInfo field = type.GetField(fieldname, flag);            return (T)field.GetValue(instance);        }        /// <summary>        /// 得到私有属性的值        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="instance"></param>        /// <param name="propertyname"></param>        /// <returns></returns>        public static T GetPrivateProperty<T>(this object instance, string propertyname)        {            BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;            Type type = instance.GetType();            PropertyInfo field = type.GetProperty(propertyname, flag);            return (T)field.GetValue(instance, null);        }        /// <summary>        /// 设置私有成员的值        /// </summary>        /// <param name="instance"></param>        /// <param name="fieldname"></param>        /// <param name="value"></param>        public static void SetPrivateField(this object instance, string fieldname, object value)        {            BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;            Type type = instance.GetType();            FieldInfo field = type.GetField(fieldname, flag);            field.SetValue(instance, value);        }        /// <summary>        /// 设置私有属性的值        /// </summary>        /// <param name="instance"></param>        /// <param name="propertyname"></param>        /// <param name="value"></param>        public static void SetPrivateProperty(this object instance, string propertyname, object value)        {            BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;            Type type = instance.GetType();            PropertyInfo field = type.GetProperty(propertyname, flag);            field.SetValue(instance, value, null);        }        /// <summary>        /// 调用私有方法        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="instance"></param>        /// <param name="name"></param>        /// <param name="param"></param>        /// <returns></returns>        public static T CallPrivateMethod<T>(this object instance, string name, params object[] param)        {            BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;            Type type = instance.GetType();            MethodInfo method = type.GetMethod(name, flag);            return (T)method.Invoke(instance, param);        }


 

原创粉丝点击