如何通过类名(string类型)去实例化?

csz_1987 2011-05-10 09:39:56
场景描述:通过读取配置文件里的节点,来实例化对应的类。


<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="MenuOne" value="FormOne" />
</appSettings>
</configuration>


通过读取Key:MenuOne 得到Value:FormOne

这时候的FormOne是String类型。如何将他转换为项目内存在的那个同名的Form类型的FromOne?

是否是通过反射来完成?

不知道我这样表达大家会不会听得懂?
...全文
506 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Daqing 2011-05-10
  • 打赏
  • 举报
回复
  public class GetObject
{
/// <summary>
/// GetObject getobj = new GetObject("ConsoleApplication1", "ConsoleApplication1.Bll", "Sendmail");
/// object obj = GetObject.Dinstanceclass["Cacul"];
/// </summary>
public static Dictionary<string, object> Dinstanceclass = new Dictionary<string,object>();
public GetObject(string properties,string namespaces,string classname)
{
Assembly ass = Assembly.Load(properties);//程序集名称
Type ty=ass.GetType(string.Concat(namespaces,".",classname));//命名空间名称.类名
object obj=(object )Activator.CreateInstance(ty);//实例化对象(泛型) 后面可根据classname返回具体的类实例
if(!Dinstanceclass.ContainsKey(classname))
Dinstanceclass[classname] = obj;
}
}
零时写了个方法,你看看
csz_1987 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tsapi 的回复:]

C# code
Type ty = Assembly.Load("程序集名称/dll名称").GetType(string.Format("命名空间名称.{0}",FormOne");

T obj= (T)Activator.CreateInstance(ty);

return obj;
[/Quote]
结合2楼的答案,问题解决啦。谢谢。。。
csz_1987 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ojlovecd 的回复:]

C# code

object obj = Activator.CreateInstance(Type.GetType("FormOne"));
[/Quote]

按你的方法试了好久,GetType都是Null,原来是没加上namespace。
问题解决了。谢谢。
menglingjun 2011-05-10
  • 打赏
  • 举报
回复
顶~支持用程序集的方法 Assembly.Load。。
isjoe 2011-05-10
  • 打赏
  • 举报
回复
说实话,没怎么看懂啊。。。。杯具了
shizhichao 2011-05-10
  • 打赏
  • 举报
回复
反射就ok了

2楼 4楼 正解

Daqing 2011-05-10
  • 打赏
  • 举报
回复
Type ty = Assembly.Load("程序集名称/dll名称").GetType(string.Format("命名空间名称.{0}",FormOne");

T obj= (T)Activator.CreateInstance(ty);

return obj;
zhgroup 2011-05-10
  • 打赏
  • 举报
回复
可以通过反射来创建对象
首先要提供准备创建对象所在的程序集信息,对象名称,构造函数参数等
这些都可以通过配置文件来提供
我姓区不姓区 2011-05-10
  • 打赏
  • 举报
回复

object obj = Activator.CreateInstance(Type.GetType("FormOne"));
icesoul2030 2011-05-10
  • 打赏
  • 举报
回复
顶一个,对反射也不太了解。关注

110,535

社区成员

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

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

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