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