1:动态加载程序集,并获得程序集的类型。
动态加载程序集的一个类 Assembly 。
namespace 反射类型的使用
{
class Program
{
static void Main(string[] args)
{
Assembly assembly = Assembly.LoadFile( @" Path / HelloWord.exe ") ; / /加载指定路径下的程序集
Type[ ] typearr = assembly .GetTypes() ; // 获得程序集中类型的数组 --- 循环遍历typearr可以获得程序集中定义的类型
Type[ ] publictypearr = assembly.GetExportedTypes(); / / 获取程序集中所有的公共类型
/ / 在知道程序集中的情况时,也可以通过类型名称来获得类型。
Type type = smb.GetType("TypesHelloWord.Person");
/ / 获得了执行的类型后就可以获得该类型指定的方法了。
MethodInfo mdinfo = type.GetMethod("PublicSayHello"); / /方法名称 GetMethods() 可以获得方法的数组
object personObj = Activator.CreateInstance(type); / / 创建该方法所在类的对象
dminfo.Invoke(personObj, null) ; / / 静态方法不用传入对象,实列方法才需要传入对象,第二个是传入参数值
/ / 如果方法有返回值,就直接接收Invoke() ; 的返回值、方法需要参数以object[ ] 的方式传参
MethodInfo methodInfo = type.GetMethod("HelloWord", new Type[] { typeof(string), typeof(double), typeof(bool) });//获得有参数的方法,参数个数会自动匹配
object obj = methodInfo.Invoke(Activator.CreateInstance(type), new object[ ] { "张三", 1.00, false }); //调用有参数有返回值的方法
//调用带参数的构造函数
ConstructorInfo cusInfo = type .GetConstructor(new Type[ ] { typeof(string), typeof(string), typeof(string) } ; //先获得这个带参构造器
object obj1 = cusInfo.Invoke(new object[] { "张三", "22", "男" }); / /传参 调用构造器方法 返回构造器类的对象
PropertyInfo proinfo = type.GetProperty("Name"); / /获得属性对象
object strObj = proinfo.GetValue(obj1,null); / / 获得属性值
}
}
}