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