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

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

  • 相关阅读:
    编写pl/sql时,报错
    ORA-00906 missing left parenthesis括号
    数仓理论
    查看oracle实例名
    Oracle 关键字
    oracle关键字作为字段名使用方法
    dump函数
    raw数据类型
    oracle同义词是什么意思?
    10 Useeful Tips for Writing Effective Bash Scripts in Linux
  • 原文地址:https://www.cnblogs.com/lmfeng/p/3472565.html
Copyright © 2011-2022 走看看