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();
      }
    }

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

  • 相关阅读:
    网络初级篇之STP(BPDU详解与STP故障恢复)
    网络初级篇之STP(实验验证)
    3-1 查看帮助,命令历史与快捷键
    2-1 bash基本特性
    2-0 虚拟机与Linux系统安装
    0.操作系统的获取与安装
    1.计算机基础
    Linux下打包、压缩和解压
    JAVA基本数据类型转换的注意事项
    EditPlus代码自动完成的设置
  • 原文地址:https://www.cnblogs.com/lmfeng/p/3472565.html
Copyright © 2011-2022 走看看