C# 动态创建对象只要有两大类 Activator 和 Assembly 。
Activator 类
Activator 类提供好几个动态创建对象的重载方法。
1:public static object CreateInstance(Type type); 2:public static object CreateInstance(Type type, params object[] args);
动态创建对象主要接受的参数为Type,而获取Type对象有三种方式
1:Type type = Type.GetType(
"命名空间名称.类名"
);
2:Type type =
typeof
(
"类名"
);
3:Person p =
new
Person();
//通过对象来进行创建type
Type type = p.GetType();
两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数。
Type type =
typeof
(Person);
var
p = Activator.CreateInstance(type)
as
Person;
public
class
Person
{
public
Person()
{
}
public
Person(
string
name,
int
age)
{
this
.Name = name;
this
.Age = 1;
}
public
string
Name {
set
;
get
; }
public
int
Age {
set
;
get
; }
public
void
SayHello()
{
Console.WriteLine(
"你好"
);
}
}
动态创建创建有参数的构造函数
Type type =
typeof
(Person);
var
p = Activator.CreateInstance(type,
new
object
[] {
"xiaohong"
,1})
as
Person;
Console.WriteLine(p.Name);
Assembly 类
//Assembly ass = Assembly.Load(Assembly.GetExecutingAssembly().FullName); 知道当前创建的对象是当前程序集
// Assembly ass = Assembly.LoadFile(@"程序集的全路径");
Assembly ass = Assembly.LoadFrom(
@"程序集的全路径"
);
// LoadFile和LoadFrom 区别是 LoadFrom它会载入dll文件及其引用的其他dll,而LoadFile 只载入相应的dll文件
Type type =
null
;
ass.GetTypes().ToList().ForEach(i =>
{
if
(i.IsClass && i.IsPublic && i.Name ==
"Person"
)
{
type = i;
}
});
var
p = Activator.CreateInstance(type,
new
object
[] {
"xiaohong"
, 1 })
as
Person;
Console.WriteLine(p.Name);
Console.ReadKey();