답변:
명명 된 매개 변수를 통해 CreateInstance에 인수를 전달하는 다른 방법이 있습니다.
이를 기반으로으로 배열을 전달할 수 있습니다 CreateInstance
. 이를 통해 0 개 또는 여러 개의 인수를 가질 수 있습니다.
public T CreateInstance<T>(params object[] paramArray)
{
return (T)Activator.CreateInstance(typeof(T), args:paramArray);
}
Activator.CreateInstance에서 인수를 전달하면 매개 변수없는 작성과 비교하여 성능상의 차이가 큽니다.
사전 컴파일 된 람다를 사용하여 객체를 동적으로 생성하는 더 나은 대안이 있습니다. 물론 성능은 항상 주관적이며 가치가 있는지 여부에 따라 각 경우에 따라 다릅니다.
그래프는 기사에서 가져 오며 1000 호출 당 소요 된 시간을 ms로 나타냅니다.
Activator.CreateInstance
걸리는 것을 의미 0.0035ms
합니다. 응용 프로그램에 따라 성능 테스트에 전혀 등록되지 않을 수도 있습니다.
Activator.CreateInstance의 대안으로, 링크 된 URL의 FastObjectFactory는 Activator보다 우수합니다 (.NET 4.0에서와 .NET 3.5보다 훨씬 우수합니다. .NET 4.5로 수행 된 테스트 / 통계 없음). 통계, 정보 및 코드는 StackOverflow 게시물을 참조하십시오.
Activator.CreateInstance에서 ctor args를 전달하거나 IL을 사용하는 방법은 무엇입니까?
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;
}
}