zoukankan      html  css  js  c++  java
  • 访问私有成员的方法-------C# 转载

      static void Main(string[] args)
            {
                MyClass mc = new MyClass();
                Type t = mc.GetType();
                Console.WriteLine("字段:");
                foreach (FieldInfo fi in t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
                    Console.WriteLine("名称:" + fi.Name + ",类型:" + fi.FieldType.Name);
    
    
                Console.WriteLine("属性:");
                foreach (PropertyInfo pi in t.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
                {                                                                                   //获取值
                    Console.WriteLine("名称:" + pi.Name + ",类型:" + pi.PropertyType.Name + ",值:" + pi.GetValue(mc, null));
                                                                                    pi.SetValue(mc, "nihao", null);   //赋值                  
                                                 
                }
                   
                Console.WriteLine("方法:");
                foreach (MethodInfo mi in t.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
                    Console.WriteLine("名称:" + mi.Name + ",返回类型:" + mi.ReturnType.Name);
    
                Console.ReadKey();
            }
            class MyClass
            {
                private int i;
                public int I;
    
    
                private string s;
                public string S
                {
                    get { return s; }
                    set { s = value; }
                }
    
    
                public void Method()
                { }
            }





    1、得到私有字段的值: 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); }2、得到私有属性的值: 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); }3、设置私有成员的值: 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); } 4、设置私有属性的值: 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); } 5、调用私有方法: 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); }
  • 相关阅读:
    虚拟机操作系统文件夹空间不足解决办法——对虚拟硬盘进行分区和格式化及 挂载到某个文件夹下
    设计模式(二十一)—职责链模式(行为型)
    VMware 中添加新的虚拟磁盘的方法
    设计模式(二十二)—中介者模式(行为型)
    level of detail algorithmrendering of massive realtime terrain
    金融领域实施项目特点总结
    第35周星期日总结
    第36周星期一小结
    第32周星期二总结
    第35周星期三小结
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/4937682.html
Copyright © 2011-2022 走看看