如何动态的加载类 我做了一个主窗体Main,我想通过类在main上显示控件,例如:在main中调用类A船体上就会显示按钮,调用类B窗体上就会显示文本框。问题是我现在不知道将要调用哪个类,类的名字都写在一个配置文件中,我可以从配置文件中读取出类的名字,然后调用。请各位大哥给小弟指点指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Activator.Create("FormA.dll", "FormA.MyForm1"); 公司的人告诉我用程序集(assembly),具体怎么用它也不知道。请大家指点一下 使用反射啊//read config file to get assembly name and class name(need contain namespace)[C#]public static ObjectHandle CreateInstance( string assemblyName, string typeName); 用Activator.CreateInstance 动态创建对象 或者还可以使用Assembly.CreateInstance 方法:public object CreateInstance( string typeName);查msdn吧 http://blog.csdn.net/veryhappy/archive/2005/11/23/535767.aspx //加载控件(文件名用你需要加载的控件类所在文件") Assembly assembly = Assembly.LoadFrom(@"Panpipe.Test.exe"); //获得类(型) Type type = assembly.GetType("Panpipe.Test.LoginControl",false,true); //设置筛选标志 BindingFlags bflags = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; //调用构造函数并获得对象 Object obj = type.InvokeMember("Panpipe.Test.LoginControl", bflags | BindingFlags.CreateInstance, null, null, null); //将对象转换类型 System.Windows.Forms.Control c = (Control)obj; //指定位置 c.Location = new System.Drawing.Point(272, 192); //将控件添加到窗体 this.Controls.Add(c); 对公司的人告诉你的是对的用反射查查msdn有现成的例子 我用下面的方法加载了一个dll文件:Assembly SampleAssembly;SamplyAssembly = Assembly.LoadFrom(@"F:\btn.dll");MethodInfo Method = SamplyAssembly.GetType()[0].GetMethod("ShowBtn");//ShowBtn是btn中的一个方法,需要一个参数:Button bt我现在应该怎样调用这个方法呢? 我的只需要调用一下btn.dll中的ShowBtn方法就可以将控件显示出来 怎么样了?给你简单点的代码 object[] myarray=new object[1]; myarray[0]=(object)(bt); Assembly ass=Assembly.LoadFrom(@"F:\btn.dll"); object oo=ass.CreateInstance("类名"); Type mytype=oo.GetType(); MethodInfo mi=mytype.GetMethod("ShowBtn"); mi.Invoke(oo,myarray); 反射:(类名称)Assembly.Load(类名称).CreateInstance(构造函数名称, false);这样将获得一个前面括号内的类实例~! 使用反射生成一个窗体:private void button1_Click(object sender, System.EventArgs e){ Assembly assm = Assembly.LoadFrom("e:\\WindowsApplication.dll"); Type TypeToLoad= assm.GetType("WindowsApplication.Form1"); object obj; obj = Activator.CreateInstance(TypeToLoad); Form formToShow = null; formToShow = (Form)obj; formToShow.Show(); } winform中的offset函数是什么意思 什么用 怎么用 小沈阳《爱是你我》很好听啊,如何实现在12:26--14:22之间循环? 帮写下 参考下 日期处理程序 checkbox事件怎么不触发 两个问题。1、如何在自定义的类中操作全局的Application对象 在C#里,如何用API播放MIDI乐音,这里的代码看不动,谁来个详细的例子。 请教b/s系统开发 关于数据更新的一个很弱的问题 如何检索打印机是忙还是空闲? 串口发送数据接收数据问题。 急!如何在axWebBrowser中选中一个图片?急! .Net的项目如何生成.chm的帮助文档
//read config file to get assembly name and class name(need contain namespace)
[C#]
public static ObjectHandle CreateInstance(
string assemblyName,
string typeName
);
string typeName
);查msdn吧
Assembly assembly = Assembly.LoadFrom(@"Panpipe.Test.exe");
//获得类(型)
Type type = assembly.GetType("Panpipe.Test.LoginControl",false,true);
//设置筛选标志
BindingFlags bflags = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
//调用构造函数并获得对象
Object obj = type.InvokeMember("Panpipe.Test.LoginControl", bflags | BindingFlags.CreateInstance, null, null, null);
//将对象转换类型
System.Windows.Forms.Control c = (Control)obj;
//指定位置
c.Location = new System.Drawing.Point(272, 192);
//将控件添加到窗体
this.Controls.Add(c);
公司的人告诉你的是对的
用反射
查查msdn有现成的例子
Assembly SampleAssembly;
SamplyAssembly = Assembly.LoadFrom(@"F:\btn.dll");
MethodInfo Method = SamplyAssembly.GetType()[0].GetMethod("ShowBtn");//ShowBtn是btn中的一个方法,需要一个参数:Button bt我现在应该怎样调用这个方法呢?
object[] myarray=new object[1];
myarray[0]=(object)(bt);
Assembly ass=Assembly.LoadFrom(@"F:\btn.dll");
object oo=ass.CreateInstance("类名"); Type mytype=oo.GetType();
MethodInfo mi=mytype.GetMethod("ShowBtn");
mi.Invoke(oo,myarray);
(类名称)Assembly.Load(类名称).CreateInstance(构造函数名称, false);
这样将获得一个前面括号内的类实例~!
private void button1_Click(object sender, System.EventArgs e)
{
Assembly assm = Assembly.LoadFrom("e:\\WindowsApplication.dll");
Type TypeToLoad= assm.GetType("WindowsApplication.Form1");
object obj;
obj = Activator.CreateInstance(TypeToLoad);
Form formToShow = null;
formToShow = (Form)obj;
formToShow.Show();
}