美文网首页
为什么使用反射 (包含dynamic在反射中的用法)

为什么使用反射 (包含dynamic在反射中的用法)

作者: sttone | 来源:发表于2020-05-18 16:33 被阅读0次

什么是反射

官方解释是指程序在运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性。

反射实例

Persion.cs

 public class Persion
    {
        public string Name { get; set; }
        public int Sex { get; set; }

        public string UserInfo(string key)
        {
            return "我是反射"+key;
        }
    }

使用反射

 class Program
    {
        static void Main(string[] args)
        {
           Persion _persion = new Persion();
           var addMethod = typeof(Persion).GetMethod("UserInfo");
           string retval = (string)addMethod.Invoke(_persion,new object[] { "11111" });
           Console.WriteLine(retval);
           Console.ReadLine();
        }
}

使用反射 dynamic版本

 class Program
    {
        static void Main(string[] args)
        {
            dynamic dyn = new Persion();
            string retval1 = dyn.UserInfo("11111");
            Console.WriteLine(retval1);
            Console.ReadLine();
        }
    }

为什么要使用反射

反射最大的好处就是能在运行期间,获得某个类的结构、成员变量,用来实例化
下列是具体使用场景:

场景一
假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。反射机制它知道类的基本结构,这种对类结构探知的能力。

场景二
比如你写了一个程序,这个程序定义了一些接口,只要实现了这些接口的dll都可以作为插件来插入到这个程序中。那么怎么实现呢?就可以通过反射来实现。就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。
很多工厂模式就是使用的反射

反射的弊端
使用反射会比直接实例化调用方法的速度满

相关文章

  • 为什么使用反射 (包含dynamic在反射中的用法)

    什么是反射 官方解释是指程序在运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能...

  • java基础-反射

    知识点 反射的基本概念 反射中class类的获取 反射中field类属性的获取 反射中method类方法的获取 反...

  • 02 反射和动态代理模式

    1 反射(Reflect) 反射之中包含了一个「反」字,所以了解反射我们先从「正」开始。 一般情况下,我们使用某个...

  • 反射API

    反射API 前言 在面试中,经常会被问到在Java反射中Class.forName()加载类和使用ClassLoa...

  • Java 高级特性——反射及动态代理模式

    反射(Reflect) 反射之中包含了一个「反」字,所以了解反射我们先从「正」开始。 一般情况下,我们使用某个类时...

  • Java中反射学习系列教程之二

    在上一篇文章《Java中反射学习系列教程之一》中我们学了什么是反射;反射中的反字怎么理解;以及反射的特点。今天我们...

  • 使用dynamic简化反射

    通常我们这样使用反射来调用一个函数 而使用dynamic可以简化这个流程,而且效率更高 当然优化后的反射效率更高,...

  • Java遍历对象的属性和值

    在Java类中,我们可以使用反射中的getDeclaredFields()或者getFields()方法来获取属性...

  • Java反射简介与使用

    什么是反射? 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。一般情况下,我们使用某个类时必...

  • 在Java的反射中,Class.forName和ClassLoa

    在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。解释 在java中C...

网友评论

      本文标题:为什么使用反射 (包含dynamic在反射中的用法)

      本文链接:https://www.haomeiwen.com/subject/svzuohtx.html