.NET程序内,访问私有或者保护成员的技巧

如果是C++,我们可以计算对象内成员的位置,然后偏移指针以访问类型的所有非公开成员。但是.NET对象完全受GC管理,地址根本无法得到,并且也无法通过指针调用方法。

当然... 这是一种很不值得推荐的技巧,访问非公有成员很可能破坏对象状态,造成不可预料的后果。但是无论如何,利用.NET的反射机制可以轻松做到这一点。

比如这样一个类:

class MyClass
{
  private string PrivateField = "Private Field";
  protected string ProtectedField = "Protected Field";

  private string _ProtectedProperty = "Protected Property";
  protected string ProtectedProperty
  {
   get{return _ProtectedProperty;}
   set{_ProtectedProperty = value;}
  }

  private string _PrivateProperty = "Private Property";
  private string PrivateProperty
  {
   get{return _PrivateProperty;}
   set{_PrivateProperty = value;}
  }

  protected void ProtectedMethod()
  {
   Console.WriteLine("Protected Method Invoked");
  }

  private void PrivateMethod()
  {
   Console.WriteLine("Private Method Invoked");
  }
}

除了默认的构造函数,没有任何成员是公开的,但是我仍然想获取和设置Field和Property的值,以及调用那两个方法。方法是:

输出:

除了Field、Property、Method,对象还有一种成员?对,事件,一样可以操作,答案是EventInfo :-)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值