111,092
社区成员




//利用反射进行动态加载和调用.
//利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll
Assembly ass = Assembly.LoadFrom(path + @"\IrisSkin2.dll");
//加载dll后,需要使用dll中某类.
//利用类型的命名空间和名称获得类型
Type type = ass.GetType("Sunisoft.IrisSkin.SkinEngine");
MessageBox.Show("type=" + type.ToString());//经测试,成功获得类型
//需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略
//利用指定的参数实例话类型
Object obj = Activator.CreateInstance(type,((System.ComponentModel.Component)(this)));
//Object obj = Activator.CreateInstance(type);//这样写也不行
MessageBox.Show("obj=" +obj.ToString());
//得到及设置属性
System.Reflection.FieldInfo fi= type.GetField("SkinFile");
fi.SetValue(obj, path + @"\AutoAccessQzone_Skin.ssk");
//加载dll中的程序集;
Assembly ass = Assembly.LoadFrom(path + @"\IrisSkin2.dll");
//获取所要使用的类
Type type = ass.GetType("Sunisoft.IrisSkin.SkinEngine");
//实例化类
Object obj = Activator.CreateInstance(type,((System.ComponentModel.Component)(this)));
//从类中获取属性
//System.Reflection.FieldInfo fi = type.GetField("SkinFile");//原来我用的是这行代码,所以出错
System.Reflection.PropertyInfo fi = type.GetProperty("SkinFile");//获取类中的属性,用这行代码
//设置属性
fi.SetValue(obj,path + @"\AutoAccessQzone_Skin.ssk",null);
Object obj = ass.CreateInstance(type.ToString(),
false,
System.Reflection.BindingFlags.CreateInstance&System.Reflection.BindingFlags.SetField,
null,
new object[] { (System.ComponentModel.Component)(this)},
null,
null);
----------------------------------------------
Object obj = ass.CreateInstance(type.ToString(),
false,
System.Reflection.BindingFlags.CreateInstance
null,
new object[] { (System.ComponentModel.Component)(this)},
null,
null);
----------------------------------------------------------------
Object obj = ass.CreateInstance(type.ToString(),
false,
System.Reflection.BindingFlags.SetField
null,
new object[] { (System.ComponentModel.Component)(this)},
null,
null);
---------------------------------------------------------------------
Object obj = ass.CreateInstance(type.ToString());