反射-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项目\委托\泛型\bin\Debug\泛型.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();//



        }

    }

 

你可能感兴趣的:(反射)