• 反射


    反射
    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/>");
                }
               
     
  • 相关阅读:
    C#开发微信公众平台-就这么简单(附Demo)
    Newtonsoft.Json高级用法
    C#获取文件的MD5码
    C#动态执行代码
    c#插件式开发
    利用反射执行代码
    yield关键字用法与解析(C# 参考)
    HttpContext.Current.Cache和HttpRuntime.Cache的区别,以及System.Runtime.Caching
    GZip压缩与解压缩
    Asp.Net 请求处理机制
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/7226564.html
Copyright © 2020-2023  润新知