资源描述:
《详解C#中如何访问私有成员》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、详解C#中如何访问私有成员本文将为大家介绍的是C#中如何访问私有成员,也包括得到私有字段的值和得到私有属性的值。首先访问一个类的私有成员不是什么好做法。大家都知道私有成员在外部是不能被访问的。一个类中会存在很多私有成员:如私有字段、私有属性、私有方法。对于私有成员造访,可以套用下面这种非常好的方式去解决。1.private string name; 2.public string Name 3.{ 4. get 5. { 6. return name; 7. } 8. set 9. { 10. name = value; 1
2、1. } 12.} 但是有时候,源代码是别人的,只提供给你dll。或者你去维护别人的代码,源代码却有丢失。这样的情况或许你想知道私有成员的值,甚至去想直接调用类里面的私有方法。那怎么办呢?在.net中访问私有成员不是很难,这篇文章提供几个简单的方法让你如愿以偿。为了让代码用起来优雅,使用扩展方法去实现。1、得到私有字段的值:13.public static T GetPrivateField(this object instance, string fieldname) 14.{ 15. BindingFlags flag = BindingFlags.Insta
3、nce
4、 BindingFlags.NonPublic; 16. Type type = instance.GetType(); 17. FieldInfo field = type.GetField(fieldname, flag); 18. return (T)field.GetValue(instance); 19.} 2、得到私有属性的值:1.public static T GetPrivateProperty(this object instance, string propertyname) 2.{ 3. BindingFlags fla
5、g = BindingFlags.Instance
6、 BindingFlags.NonPublic; 4. Type type = instance.GetType(); 5. PropertyInfo field = type.GetProperty(propertyname, flag); 6. return (T)field.GetValue(instance, null); 7.} 3、设置私有成员的值:8.public static void SetPrivateField(this objectinstance, stringfieldname, o
7、bjectvalue) 9.{ 10. BindingFlagsflag = BindingFlags.Instance
8、 BindingFlags.NonPublic; 11. Typetype = instance.GetType(); 12. FieldInfofield = type.GetField(fieldname, flag); 13. field.SetValue(instance, value); 14.} 4、设置私有属性的值:15.public static void SetPrivateProperty(this o
9、bjectinstance, stringpropertyname, objectvalue) 16.{ 17. BindingFlagsflag = BindingFlags.Instance
10、 BindingFlags.NonPublic; 18. Typetype = instance.GetType(); 19. PropertyInfofield = type.GetProperty(propertyname, flag); 20. field.SetValue(instance, value, null); 21.} 5、调用私有
11、方法:22.public static T CallPrivateMethod(this object instance, string name, params object[] param) 23.{ 1. BindingFlags flag = BindingFlags.Instance
12、 BindingFlags.NonPublic; 2. Type type = instance.GetType(); 3. MethodInfo m