有没有方法能将字符串转换成"类型"?

kyo_siye 2006-10-30 11:24:25
有没有方法可以将字符串转换成类型,这样我可以动态进行定义
类似于func("TextBox") txt = new func("TextBox");

当然用这种方法也可以实现,但要把每种可能出现的情况都写进去,觉得不爽

void func(string str)
{
switch(str)
{
case "TextBox":
TextBox txt = new TextBox();
break;
case "ComboBox":
ComboBox txt = new ComboBox();
break;
default:
break;
}
}
...全文
185 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujia_0421 2006-10-30
  • 打赏
  • 举报
回复
似乎反射能够实现,学习一下....
viena 2006-10-30
  • 打赏
  • 举报
回复
因为你的要求不具体
看一下System.Reflection命名空间
比如MethodInfo类可以动态创建方法

如果你只是创建一个制定类型的对象
Activator.CreateInstance(assemblyName,typeName);
就可以了
kyo_siye 2006-10-30
  • 打赏
  • 举报
回复
楼上两位能否写的详细一些呢
viena 2006-10-30
  • 打赏
  • 举报
回复
Activator.CreateInstance
shalen520 2006-10-30
  • 打赏
  • 举报
回复
反射

System.Reflection
marvelstack 2006-10-30
  • 打赏
  • 举报
回复
参考,
http://www.c-sharpcenter.com/CSNET/dynamicinvoke.asp
http://www.c-sharpcorner.com/Code/2002/April/LoadingAssemblyInfo.asp

Dynamically load a class and execute a method in .NET
http://www.codeproject.com/csharp/DynLoadClassInvokeMethod.asp
marvelstack 2006-10-30
  • 打赏
  • 举报
回复
使用反射生成一个窗体的例子:
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();
kyo_siye 2006-10-30
  • 打赏
  • 举报
回复
private void CreateCtrl(Type tp)
{
Control ctrl;
ctrl = (Control)Activator.CreateInstance(tp);
this.Controls.Add(ctrl);
}
private void CreateCtrl(string str)
{
Control ctrl;
ObjectHandle obj = Activator.CreateInstance("System.Windows.Forms",str);
ctrl = (Control)obj.Unwrap();
this.Controls.Add(ctrl);
}

private void Form1_Load(object sender, EventArgs e)
{
CreateCtrl("System.Windows.Forms.TextBox");
CreateCtrl(typeof(TextBox));
}

private void CreateCtrl(Type tp)这个是可以实现的

private void CreateCtrl(string str)会报
未能加载文件或程序集“System.Windows.Forms”或它的某一个依赖项。系统找不到指定的文件。这是为什么?
viena 2006-10-30
  • 打赏
  • 举报
回复
CreateCtrl("System.Windows.Forms.TextBox");
viena 2006-10-30
  • 打赏
  • 举报
回复
private void CreateCtrl(string str)
{
Control ctrlctrl = Activator.CreateInstance("System.Windows.Forms",str);
this.Controls.Add(ctrl);
}
kyo_siye 2006-10-30
  • 打赏
  • 举报
回复
要求大概是这样的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace TemplateSample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void CreateCtrl(string str)
{
Control ctrl;

////将str转换成类型
//myType = xx(str);
////定义一个此类型的变量
//ctrl = new myType();

this.Controls.Add(ctrl);

}
private void Form1_Load(object sender, EventArgs e)
{
//在Form1上创建一个TextBox的控件
CreateCtrl("TextBox");
}
}
}

Activator.CreateInstance(assemblyName,typeName);
msdn没有看明白。。。。

110,536

社区成员

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

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

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