zoukankan      html  css  js  c++  java
  • 反射总结

    网络不好直接上代码:

    反射获取程序集、类、方法等的总结

     protected void Page_Load(object sender, EventArgs e)
            {
                #region 加载程序集
                //1.加载当前目录下面
                Assembly ass = Assembly.Load("fanshe");
    
                //2.加载相对路径
                Assembly ass1 = Assembly.LoadFile(@"F:
    etcode2017复习反射infanshe.dll");
    
                //3.获取当前对象所在的程序集
                Assembly ass2 = this.GetType().Assembly;
    
                //4.得到所以当前程序域中的程序集
                Assembly[] ass3 = AppDomain.CurrentDomain.GetAssemblies(); 
                #endregion
    
    
    
                #region 获取type
                /*
                 获取type
                 */
                //1.通过程序集获取
                Type type1 = ass.GetType("fanshe.Option");
    
                //2.通过typeof获取
                Type type2 = typeof(Load);
    
                //3.通过当前对象
                Type type3 = this.GetType(); 
                #endregion
    
    
                #region 获取类
                /*
                 得到对象
                 */
                //1.通过程序集
                object obj = ass.CreateInstance("fanshe.Option");
    
                //2.通过激活器
                object obj1 = Activator.CreateInstance(type1);
    
    
                //如果类中没有无参的构造函数就只能通过下面方式创建
                //3.1通过构造器
                ConstructorInfo cinfo = type1.GetConstructor(new Type[]
                {
                    typeof(string)
                });
                object obj4 = cinfo.Invoke(new object[] { "张三" });
    
                //3.2构造器创建无参的
                ConstructorInfo cinfo2 = type1.GetConstructor(new Type[] { });
                object obj5 = cinfo2.Invoke(new object[] { }); 
                #endregion
    
    
                #region 获取方法
                /*
                 得到方法
                 */
                //1.获取程序集
                Assembly asse = Assembly.LoadFile(@"F:
    etcode2017复习反射infanshe.dll");
                //2.获取type
                Type t = asse.GetType("fanshe.Option");
                //3.获取对象
                object obje = asse.CreateInstance("fanshe.Option");
                //4.获取方法
                MethodInfo minfo = t.GetMethod("Add");
                //5.运行方法,传递参数
                object add = minfo.Invoke(obje, new object[] { 1, 4 });
                Response.Write("和为:" + add); 
                #endregion
    
                #region 属性
                /*
                 获取属性赋值
                 */
                //1.获取程序集
                Assembly a = Assembly.Load("fanshe");
                //2.获取type
                Type ty = a.GetType("fanshe.Option");
                //3.得到属性
                PropertyInfo p = ty.GetProperty("Sum");
                //4.得到对象
                object o = Activator.CreateInstance(ty);
                //5.设置值
                p.SetValue(o, 30);
                //6.取值
                object sum = p.GetValue(o);
                Response.Write(sum); 
                #endregion
            }
    

      反射类的代码

    namespace fanshe
    {
        public class Option
        {
            public Option()
            {
                
            }
    
            public Option(string name)
            {
                this.str1 = name;
            }
            public string str1;
            public int Sum { get; set; }
    
            public int Add(int a,int b )
            {
                return a + b;
            }
    
            public int Long(string str)
            {
                return str.Length;
            }
    
        }
    }
    

      

  • 相关阅读:
    二维数组实现八皇后问题
    解决Java接口内部类的main()方法无法打印输出的问题
    hbase shell 常见命令
    hbase-0.94 Java API
    JavaMail简单版实验测试
    经典KMP算法C++与Java实现代码
    Hadoop之倒排索引
    哈希哈希
    Servlet和JSP学习指导与实践(三):JSP助阵
    Servlet和JSP学习指导与实践(二):Session追踪
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/6375891.html
Copyright © 2011-2022 走看看