急!----如何根据传入的类型动态创建?----

god263 2005-01-14 12:54:02
写一个方法用来动态创建各种不明确的类的实例:
public void CreateInstance(string[] aa)
{
}

aa 是一个包含很多个类名称的字符串数组
如:string[] temp = new string[2];
temp[0] = "CheckBox";
temp[1] = "TextBox";
请问如何将数组内的所有类型都创建出来啊?
...全文
254 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
FJGoodGood 2005-03-22
  • 打赏
  • 举报
回复
N久的问题了。
BigF 2005-03-22
  • 打赏
  • 举报
回复
mark
北京的雾霾天 2005-01-17
  • 打赏
  • 举报
回复
要想正确的执行Type.GetType("System.Windows.Forms.CheckBox");
你需要用Assmbly加载 System.Windows.Forms.DLL才行.
机器人 2005-01-17
  • 打赏
  • 举报
回复
如:string[] temp = new string[2];
temp[0] = "CheckBox";
temp[1] = "TextBox";
===============================
改为: Type[] types = { GetType(System.Windows.Forms.TextBox),
GetType(System.Windows.Forms.CheckBox) }
god263 2005-01-17
  • 打赏
  • 举报
回复
呵呵, 我就是不明白
为什么 Type t = Type.GetType("System.Int32"); 可以
而 Type t = Type.GetType("System.Windows.Forms.CheckBox"); 不可以!!!
FJGoodGood 2005-01-17
  • 打赏
  • 举报
回复
to 楼主:

Assembly asm = Assembly.GetAssembly(typeof(System.Windows.Forms.TextBox));是为了帮你引入System.Windows.Forms 这个Assembly,没有别的意思。

如果你要想直接访问 typeof("System.Windows.Forms.TextBox"),必须在引用里把 System.Windows.Forms 的“复制本地”设置为“true”
god263 2005-01-17
  • 打赏
  • 举报
回复
试了一下, 用 Type t = Type.GetType("System.Int32");
是可以的。 但是TextBox就不可以啊!
god263 2005-01-17
  • 打赏
  • 举报
回复
这个是我的代码,可行的,第一句话只是一个技巧,因为System.Windows.Forms这个Assembly是无法直接获得的。

Assembly asm = Assembly.GetAssembly(typeof(System.Windows.Forms.TextBox));
Type t = asm.GetType("System.Windows.Forms.CheckBox");
MessageBox.Show(t.FullName);
//============
你这样写当然没问题。 事先已经知道类型了, 不符合要求
god263 2005-01-17
  • 打赏
  • 举报
回复
引用了。
郁闷啊
FJGoodGood 2005-01-17
  • 打赏
  • 举报
回复
这个是我的代码,可行的,第一句话只是一个技巧,因为System.Windows.Forms这个Assembly是无法直接获得的。

Assembly asm = Assembly.GetAssembly(typeof(System.Windows.Forms.TextBox));
Type t = asm.GetType("System.Windows.Forms.CheckBox");
MessageBox.Show(t.FullName);
FJGoodGood 2005-01-17
  • 打赏
  • 举报
回复
不可能啊,你有没有在工程的引用里添加System.Windows.Forms.dll ?
god263 2005-01-17
  • 打赏
  • 举报
回复
都加上了, 还是取不到类型
FJGoodGood 2005-01-17
  • 打赏
  • 举报
回复
你可能要加上System.Windows.Forms.前缀。例如:
System.Windows.Forms.CheckBox
System.Windows.Forms.TextBox等等
god263 2005-01-17
  • 打赏
  • 举报
回复
谢谢同志们, 方法还是不很爽。 结了。
meezu 2005-01-17
  • 打赏
  • 举报
回复
引用System.Windows.Forms
机器人 2005-01-17
  • 打赏
  • 举报
回复
Assembly.CreateInstance(types[0].FullName) 呵呵。
机器人 2005-01-17
  • 打赏
  • 举报
回复
改为: Type[] types = { GetType(System.Windows.Forms.TextBox),
GetType(System.Windows.Forms.CheckBox) }

public void CreateInstance(Type[] aa)
{
}
如果Type需要对应String,再写个Switch咯。
god263 2005-01-17
  • 打赏
  • 举报
回复
写一个方法用来动态创建各种不明确的类的实例:
public void CreateInstance(string[] aa)
{
}

aa 是一个包含很多个类名称的字符串数组
如:string[] temp = new string[2];
temp[0] = "CheckBox";
temp[1] = "TextBox";
请问如何将数组内的所有类型都创建出来啊?
god263 2005-01-17
  • 打赏
  • 举报
回复
不是所有组件都属于 System.Windows.Forms.DLL 吧!
唉, 看来还是没有更好的办法。
实在不行就先这样用好了。
北京的雾霾天 2005-01-17
  • 打赏
  • 举报
回复
类似问题:
http://community.csdn.net/Expert/topic/3725/3725621.xml?temp=.9959833


这样来使用:

Type t = System.Reflection.Assembly.LoadFrom(@"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Windows.Forms.dll").GetType("System.Windows.Forms.CheckBox");
加载更多回复(11)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧