关于Assembly.CreateInstance()与Activator.CreateInstance()方法的区别
呃``最近用惯了Activator.CreateInstance()和Activator.CreateInstance<T>(),非常好用,可是在看许多别人的源代码的时候,大多数用了Assembly.Load("AssemblyName").CreateInstance("ClassName");的方法,忽然想研究一下这两者到底有什么区别,于是,打开msdn,查到了两个方法的介绍:
Assembly.CreateInstance 方法 (String)
使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。
Activator.CreateInstance 方法 (Type)
使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。
看完以后,忽然觉得说了跟没说一样。不知道是我文字理解能力有问题,还是它表达有问题。
于是,没办法,只好用Reflector看看源代码了。
System.Reflection.Assembly位于mscorlib.dll里,CreateInstance()方法的源码是这样的
System.Activator也位于mscorlib.dll里,CreateInstance()方法的














源码如下
























































父类代码:
using System;
namespace TwiceDevelep
{
/// <summary>
/// Parent 的摘要说明。
/// </summary>
public class Parent
{
public Parent()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private string _Text="Parent";
public virtual string Text
{
get
{
return _Text;
}
set
{
_Text = value;
}
}
}
}
子类代码:
using System;
namespace TwiceDevelep
{
/// <summary>
/// Child 的摘要说明。
/// </summary>
public class Child:Parent
{
public Child()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private string _Text="Child";
public override string Text
{
get
{
return _Text;
}
set
{
_Text = value;
}
}
}
}
调用如下:
private void Page_Load(object sender, System.EventArgs e)
{
string assemble = "TwiceDevelep.Child,TwiceDevelep";
Type type = Type.GetType(assemble);
Parent parent = (Parent)Activator.CreateInstance(type);
string text = parent.Text;
Response.Write(text);
}