• 反射-1


     private void button1_Click(object sender, EventArgs e)
            {
                //获取当前运行 程序(应用程序域) 程序集
                Assembly[] arrs = AppDomain.CurrentDomain.GetAssemblies();
                //程序集加载到内存中就是Assembly对象
                //类:每个class,interface 加载到内存中 就是type对象
                //类的成员,方法,字段,属性,事件加载到内存中也有相应的对象
            }
    
    
            private void button2_Click(object sender, EventArgs e)
            {
    
                //1获取当前正在运行的程序集对象
                Assembly ass = this.GetType().Assembly;
                //2获取程序集中的dog类 的类型(type)对象
                Type tDog = ass.GetType("反射.Dog");
                //3 获取dog类的name字段
                FieldInfo fInfo = tDog.GetField("name");
                //4获取dog类的ShoutHi方法对象
                MethodInfo mInfo = tDog.GetMethod("ShoutHi");
    
                //5根据dog 的type对象,实例化一个Dog对象
                Dog d2 = Activator.CreateInstance(tDog) as Dog;
                //用泛型的方法来创建实例 
                Dog d3 = Activator.CreateInstance<Dog>();
                //6 使用dog类的name字段对象,为d2实例的name字段赋值
                fInfo.SetValue(d2,"小白");
               // string str = d2.name;
                //7 使用dog类的ShoutHi方法对象,执行d2实例的ShoutHi方法
                mInfo.Invoke(d2, null);//第二个要传参数是,方法的参数
    
    
            }
            /// <summary>
            /// 根据路径加载程序集
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button3_Click(object sender, EventArgs e)
            {
                string path = @"D:VS2010项目委托泛型inDebug泛型.exe";
                Assembly ass = Assembly.LoadFrom(path);
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                BLL.Class1 c = new BLL.Class1();
                //对于 正在运行的程序域来说,并不是 所有的外部添加的程序集引用 在运行的时候会立即加载到当前的程序域中
                //而是当代码里有使用到外部引用程序集的时候才会被JIT加载进来
                Assembly[] ass = AppDomain.CurrentDomain.GetAssemblies();
            }
    
            private void button5_Click(object sender, EventArgs e)
            {
                Assembly ass = this.GetType().Assembly;
                //1、通过 类的全名称获取类的 类型对象
                Type t = ass.GetType("反射.Dog");
                //2 。通过 程序集获取非私有 类型(Public)
                Type[] types = ass.GetExportedTypes();
                //3通过程序集获取所有类型
                Type[] typeAll = ass.GetTypes();
    
                //获取单个 类型对象
                //1 通过类 直接获取类型对象
                Type t2=typeof(Dog);
                //2 通过对象 来获取类型对象
                Type t3 = this.GetType();
    
                Dog d3 = new Dog();
                Type t4 = d3.GetType();//
    
            }
        }
    
  • 相关阅读:
    Linux脚本文件注释
    Linux三剑客之grep命令
    Linux获取本机IP
    Linux的cut命令详解
    Linux的wc命令详解
    Linux的uniq命令详解
    Linux的sort命令详解
    shell之a+b求和脚本的三种写法
    shell的文件比较运算符和字符串比较运算符
    shell中变量$系列的含义
  • 原文地址:https://www.cnblogs.com/sumg/p/3800965.html
Copyright © 2020-2023  润新知