Answers:
还有另一种通过命名参数将参数传递给CreateInstance的方法。
基于此,您可以将数组传递给CreateInstance
。这将使您拥有0个或多个参数。
public T CreateInstance<T>(params object[] paramArray)
{
return (T)Activator.CreateInstance(typeof(T), args:paramArray);
}
请记住,尽管在Activator.CreateInstance上传递参数与无参数创建相比在性能上有显着差异。
使用预编译的lambda动态创建对象还有更好的选择。当然,性能总是主观的,并且显然取决于每种情况是否值得。
该图摘自本文,并表示每1000个呼叫所花费的时间(以毫秒为单位)。
Activator.CreateInstance
都将花费0.0035ms
(或3.5微秒)-根据您的应用程序,这甚至可能根本不会在性能测试中进行注册。
作为Activator.CreateInstance的替代方法,链接的URL中的FastObjectFactory的性能优于Activator(从.NET 4.0开始,并且比.NET 3.5更好。在.NET 4.5中未进行任何测试/统计)。有关统计信息,信息和代码,请参见StackOverflow帖子:
public class AssemblyLoader<T> where T:class
{
public void(){
var res = Load(@"C:\test\paquete.uno.dos.test.dll", "paquete.uno.dos.clasetest.dll")
}
public T Load(string assemblyFile, string objectToInstantiate)
{
var loaded = Activator.CreateInstanceFrom(assemblyFile, objectToInstantiate).Unwrap();
return loaded as T;
}
}