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

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

  • 相关阅读:
    【转】final 关键字
    【转】安装Fiddler2+JsonViewer插件
    【转】SAP SD定价技术分析
    【转】SAP PP 顾问面试考试试题及资料
    【转】Hibernate数据过滤
    【转】与计划有关的生产数据
    【转】销售凭证类别
    将MyEclipse中的项目导入到Eclipse中报错的解决放法,将项目打war包部署服务器
    查看Android下生成的.db数据库
    删除快速启动栏的快捷方式 pplive
  • 原文地址:https://www.cnblogs.com/lmfeng/p/3472565.html
Copyright © 2011-2022 走看看