美文网首页
为什么使用反射 (包含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在反射中的用法)

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