反射-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();//

        }
    }
原文地址:https://www.cnblogs.com/sumg/p/3800965.html