C# 应用反射一个类库得到类名 再根据类名得到该类的对象

没有昵称 2011-10-20 05:09:06
Assembly assembly = Assembly.Load("Rules");
Type[] types = assembly.GetTypes();
object obj = new object();

foreach (Type tp in types)
{
Console.Write(tp.Name + tp.Module+"\n"); //显示该dll下所有的类

obj = Activator.CreateInstance(tp);
}


Rules是我的一个类库
Rules类库中定义了一系列的方法类 都继承同一个基类
现在要做的是把着一系列的方法放到一个List<基类>的集合中
我的做法是上面的那样 可是创建obj对象总是失败 错误是 “没有为该对象定义无参数的构造函数。”
求大神指点
...全文
600 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfreyes 2011-10-21
  • 打赏
  • 举报
回复
既然你要使用反射,被反射的类通常都包含一个没有参数的构造函数,如果没有最好增加一个无参数的构造函数的重载;

public class A
{

public A(string s1, string s2)
{
}
//增加构造函数的重载
public A()
{
}

}

//调用处代码

//加重载前
obj = Activator.CreateInstance(tp,"s1","s2");


//加重载后,以下两种都可以
obj = Activator.CreateInstance(tp);

obj = Activator.CreateInstance(tp,"s1","s2");


没有昵称 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xfreyes 的回复:]
不好意思

obj = Activator.CreateInstance(tp,false);
不管用

你需要判断,如果是有参数的构造函数则需要传入参数,

CreateInstance(Type type, params object[] args);
[/Quote]

能详细讲一下么 谢谢了 我先试试
没有昵称 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lexiaoyao20 的回复:]
“没有为该对象定义无参数的构造函数。”
这里不是已经说明了问题吗,你需要给构造函数传参。
[/Quote]

怎么解决这问题啊
xfreyes 2011-10-20
  • 打赏
  • 举报
回复
不好意思

obj = Activator.CreateInstance(tp,false);
不管用

你需要判断,如果是有参数的构造函数则需要传入参数,

CreateInstance(Type type, params object[] args);
xfreyes 2011-10-20
  • 打赏
  • 举报
回复
都提示错误是 “没有为该对象定义无参数的构造函数。”了,你要把给基类价格无参数构造函数就行了,
或者
obj = Activator.CreateInstance(tp,false);
Lexiaoyao20 2011-10-20
  • 打赏
  • 举报
回复
“没有为该对象定义无参数的构造函数。”
这里不是已经说明了问题吗,你需要给构造函数传参。
没有昵称 2011-10-20
  • 打赏
  • 举报
回复
大神们指点一下啊 问题出在哪
没有昵称 2011-10-20
  • 打赏
  • 举报
回复
我想知道 如果我创建成功了 是不是就是创建了一个我遍历的第一个类的对象

111,094

社区成员

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

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

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