zoukankan      html  css  js  c++  java
  • 使用dynamic类型改进反射

    首先还是声明一下,使用场景:

    1、如果编译时函数名称确定,对象类型运行时确定,那么运用dynamic是一个好主意。
    2、如果编译时函数名称确定,对象类型在编译时也确定,那就既不需要反射也不需要dynamic。
    3、如果函数名称在运行时才能确定的话,那函数名称就是一个字符串,必须使用反射来完成。

    那么我们肯定是是在第一种情况中使用dynamic类型改进反射:(编译时函数名称确定,对象类型运行时确定)

    假设我们需要反射调用的函数是:

    namespace ClassLibrary
    {
      public class Demo
      {
        public string GetName()
        {
          String name = "dddd";
          return name;
        }
      }
    }

    传统的调用一般是:

    static void Main(string[] args)
    {
      Type typeinfo = Assembly.Load("ClassLibrary").GetType("ClassLibrary.Demo");
      object instance = Assembly.Load("ClassLibrary").CreateInstance("ClassLibrary.Demo");
      MethodInfo me = typeinfo.GetMethod("GetName");
      object ret = me.Invoke(instance, null);
      Console.WriteLine(ret.ToString());

    }

    使用dynamic改良之后:

    class Program
    {
      static dynamic reflectObj = null;

      static void Main(string[] args)
      {
        if (reflectObj == null)
        {
          reflectObj = Assembly.Load("ClassLibrary").CreateInstance("ClassLibrary.Demo");
        }
        object rrr = reflectObj.GetName();

        Console.WriteLine(rrr.ToString());

        Console.ReadKey();
      }
    }

    少了一步反射生产 函数 的步骤,也对我们后面进行的反射性能调优有着非常大的帮助:)

  • 相关阅读:
    SecureCRT 安装及初始化配置
    企业生产环境中linux系统分区的几种方案
    Django之验证码 + session 认证
    Django之上传文件
    Django之Cookie与Session
    Django之CSRF 跨站请求伪造
    web前端之 DOM
    c++ 之 字符和字符串
    web前端
    调用线程无法访问此对象,因为另一个线程拥有该对象
  • 原文地址:https://www.cnblogs.com/lmfeng/p/3472565.html
Copyright © 2011-2022 走看看