• .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的值,以及调用那两个方法。方法是:

    输出:

  • 相关阅读:
    疫情控制
    数据结构1
    NOIP 模拟 921
    ml-agents项目实践(一)
    Appium的安装及简单的使用介绍
    移动设备管理平台的搭建(基于STF/ATXServer2)
    ClickHouse利器—如何提高留存计算速度
    Linux基本操作命令
    深度学习与强化学习的两大联姻:DQN与DDPG的对比分析
    漏洞扫描软件AWVS的介绍和使用
  • 原文地址:https://www.cnblogs.com/rr163/p/4178169.html
Copyright © 2020-2023  润新知