zoukankan      html  css  js  c++  java
  • 反射

    反射
    1.调用的简单步骤
    Assembly asse = Assembly.Load("MakeDinner");//动态加载DLL
    Type type = asse.GetType("MakeDinner.chef");//获取类型信息   注意 一定要指定到类名
    object objInstance = Activator.CreateInstance(type);//创建对象
    return ((chef)objInstance).cook();
    2.反射一般也要结合面向接口编程思想使用。
    Assembly asse = Assembly.LoadFile(@"D:1Project12学习实战项目1知识点练习1WebSiteinCommonSearch.Google.dll");
    object objInstance = asse.CreateInstance("ISearchByKeyword");
    return ((ICommon.ISearchByKeyword)objInstance).Search("爱爱");
    调用的时候只使用接口
    3.ioc=简单对象创建工厂+配置文件+反射
    4.对象是通过构造函数创建的,可以通过私有构造函数并提供属性暴露已创建对象的方法创建单例对象。反射的话可以通过参数获取到对象的私有方法,从而可以达到破坏单例的效果。
    5.MVC就是通过反射动态获取方法的方式实现的。
    6.动态调用方法的Demo
    //动态调用方法 //重载的方法的处理方式就是通过GetMethod第二个参数Type数组来指定
                object objInstance = Activator.CreateInstance(type);
                MethodInfo[] methodInfo = type.GetMethods();
                foreach (var item in methodInfo)
                {
                    if (item.Name.Equals("cook"))
                    {
                        var rel = item.Invoke(objInstance, new object[] { });
                        sb.Append(rel.ToString());
                        sb.Append("<br/>");
                    }
                    else if (item.Name.Equals("cookPersonalized"))
                    {
                        //(黑科技)获取一下菜谱
                        MethodInfo mi = type.GetMethod("cookDetailPersonalized", BindingFlags.NonPublic | BindingFlags.Instance);
                        var rel = mi.Invoke(objInstance, new object[] { "日本" });
                        sb.Append(rel.ToString());
                        sb.Append("<br/>");
                        rel = item.Invoke(objInstance, new object[] { "日本" });
                        sb.Append(rel.ToString());
                        sb.Append("<br/>");
                    }
                    else if (item.Name.Equals("cookPersonalizedPay"))
                    {
                        var rel = item.Invoke(objInstance, new object[] { "日本", 1000 });
                        sb.Append(rel.ToString());
                        sb.Append("<br/>");
                    }
    7.动态获取与设置属性
                PropertyInfo[] pi = type.GetProperties();
                foreach (var item in pi)
                {
                    if (item.Name.Equals("CookerName"))
                    {
                        item.SetValue(objInstance, "吕春城");
                    }
                    var rel = item.GetValue(objInstance);
                    sb.Append(item.Name + ":" + rel);
                    sb.Append("<br/>");
                }
               
     
  • 相关阅读:
    java使用jsp servlet来防止csrf 攻击的实现方法
    Fiddler抓包6-get请求(url详解)
    Fiddler抓包5-接口测试(Composer)
    Fiddler抓包4-工具介绍(request和response)
    Fiddler抓包3-查看get与post请求
    Selenium2+python自动化60-异常后截图(screenshot)
    Selenium2+python自动化59-数据驱动(ddt)
    Selenium2+python自动化58-读取Excel数据(xlrd)
    Selenium2+python自动化57-捕获异常(NoSuchElementException)
    Selenium2+python自动化56-unittest之断言(assert)
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/7226564.html
Copyright © 2011-2022 走看看