程序层次:
应用程序域(AppdoMain)----->应用程序集(Assembly)------>类(Type)---------->属性(Property)
1.获取当前应用程序域下的所有应用程序集
Assembly[] assm = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly ass in assm)
{
Console.WriteLine(ass.Location);
}
2.获取一个程序集下的类;
Assembly assm = Assembly.LoadFile(@"D:\完成项目\2014-3-14\kongzhitai\xml\testlei\bin\Debug\testlei.dll");
Type[] types= assm.GetTypes();
foreach (var type in types)
{
Console.WriteLine(type.Name);
}
3.获取一个程序集下的类的属性
Assembly assm = Assembly.LoadFile(@"D:\完成项目\2014-3-14\kongzhitai\xml\testlei\bin\Debug\testlei.dll");
Type[] types= assm.GetTypes();
foreach (var type in types)
{
Console.WriteLine(type.Name);
PropertyInfo[] pros= type.GetProperties();
foreach (var pro in pros)
{
Console.WriteLine(pro.Name);
}
}
4.获取类类型的几种方法
(1)Type type=typeof(Person);
代码:
Type type=typeof(peoson);
PropertyInfo[] pros= type.GetProperties();
foreach (var pro in pros)
{
Console.WriteLine(pro.Name);
}
(2)person p1=new person();
Type type = p1.GetType();
peoson p1 = new peoson();
Type type = p1.GetType();
PropertyInfo[] pros = type.GetProperties();
foreach (var pro in pros)
{
Console.WriteLine(pro.Name);
}
5.动态创建 加载程序集中 类的对象
创建接口项目:
public interface jie
{
string sayhello();
}
创建实现项目,实现上面接口:
public class people:jiekou1.jie
{
public string sayhello()
{
return "hello word";
}
}
主程序引用接口,用Assembly获取程序集中类,用Activator.CreateInstance创建实例,并执行方法:
Assembly assm = Assembly.LoadFile(@"D:\完成项目\2014-3-14\kongzhitai\xml\shixian1\bin\Debug\shixian1.dll");
Type type=assm.GetExportedTypes().Single();
object ibj= Activator.CreateInstance((type));
jiekou1.jie jiekou=ibj as jiekou1.jie;
Console.WriteLine(jiekou.sayhello());
Activator.CreateInstance(Type t)会动态调用类的public无参构造函数创建一个对象,返回值就是创建的对象,如果类没有无参构造函数就会报错