在实际开发中,我们有时候会遇到这样的问题,我们知道某一个类的Type,如何实例化这个对象?
答案很简单:
object obj = Activator.CreateInstance(type);
但是如果是需要批量实例化对象(例如读取自定义格式的配置文件),这种方法在效率和GC上都不太理想。(Mono2.0)
我注意到System.Object有一个方法,叫做MemberwiseClone,但是它是protected的,也就是只有衍生类在内部才能访问。那我们只有用反射把它拿出来:
object obj = Activator.CreateInstance(type);
MethodInfo mcMi = type.GetMethod("MemberwiseClone", BindingFlags.NonPublic | BindingFlags.Instance);
List<object> list = new List<object>(100);
for (int i = 0; i < 100; i++)
{
list.Add(mcMi.Invoke(obj, null));
}