zoukankan      html  css  js  c++  java
  • 反射

    一、利用反射通过程序集名称和完整类型名称动态创建对象。

    /// <summary>
    /// 利用反射创建对象。
    /// </summary>
    /// <param name="assemblyFullName">程序集完整名称</param>
    /// <param name="classFullName">类完整名称</param>
    /// <param name="args">对象构造初始参数</param>
    /// <returns></returns>
    public static object CreateObject(string assemblyFullName, string classFullName, object[] args)
    {
    Assembly _assembly = Assembly.Load(assemblyFullName);
    Type _type = _assembly.GetType(classFullName, false);
    if (null != _type)
    return Activator.CreateInstance(_type, args);

    return null;
    }

                #region 使用无参构造函数创建对象
    
                //使用无参构造函数创建对象1
                Assembly asm = Assembly.GetExecutingAssembly();
                object obj = asm.CreateInstance("WebApplication.TestClass");
    
                //使用无参构造函数创建对象2
                ObjectHandle handler = Activator.CreateInstance(null, "WebApplication.TestClass");
                //CreateInstance 第一个参数为程序集名称,为null 表示当前程序集,第二个参数表示要创建的类型  
                Object obj1 = handler.Unwrap();
                //打印:这是一个无参构造函数  
    
                #endregion
    
                #region 使用有参数构造函数创建对象
    
                object[] args =new object[2];
                args[0] = 10;
                args[1] = 20;
                Assembly asm2 = Assembly.GetExecutingAssembly();
                object obj2 = asm2.CreateInstance("WebApplication.TestClass", true, BindingFlags.Default, null, args, null,null);
    
                #endregion



                #region 动态调用方法:使用InvokeMember调用方法
    
                Response.Write("========================== 使用InvokeMember调用方法=====================<br>");
    
                //动态调用无参数方法  
                 Type t = typeof(TestClass);  
                 TestClass ts=new TestClass (1,2);
                 Response.Write("<br>");
                 int result = (int)t.InvokeMember("show", BindingFlags.InvokeMethod,null,ts,null);  
                 Response.Write(result);
                 Response.Write("<br>");
    
                 //动态调用有参静态方法  
                 Type t1 = typeof(TestClass);
                 int result1 = (int)t1.InvokeMember("show", BindingFlags.InvokeMethod, null, t1, args);
                 Response.Write(result1);
                 Response.Write("<br>");
    
                #endregion
    
                #region 使用MethodInfo.Invoke调用方法
    
                 Response.Write("========================== 使用MethodInfo.Invoke调用方法=====================<br>");
    
                   Type t2 = typeof(TestClass);  
                   TestClass ts2 = new TestClass();  
                   MethodInfo mi = t2.GetMethod("show",BindingFlags.Instance|BindingFlags.Public);  
                   int result2=(int)mi.Invoke(ts2, null);
                   Response.Write(result2);
                   Response.Write("<br>");
      
                   Type t3 = typeof(TestClass);  
                   MethodInfo mi1 = t3.GetMethod("show",BindingFlags.Static|BindingFlags.Public);  
                   int result3 = (int)mi1.Invoke(null, args);  
                   Console.WriteLine(result3); 
    
                #endregion
  • 相关阅读:
    oo第二次总结
    oo第一次总结
    OO最后一次博客儿
    OO作业总结第三弹
    OO作业总结第二弹
    初学面向对象
    hi🎈
    散列函数及其应用
    结对项目作业
    构建之法第四,第十四章读书有感 (另补第十七章)
  • 原文地址:https://www.cnblogs.com/lxf1117/p/4779283.html
Copyright © 2011-2022 走看看