Здравствуйте, Lloyd, Вы писали:
L>Activator.CreateInstance
Если волнует скорость создания и используется .NET 2.0, то можно использовать Dynamic Methods, создать метод и делегат на него, вот пример для конструктора без параметров:
public delegate object ConstructorDelegate();
DynamicMethod dmethod = new DynamicMethod("", typeof(object), new Type[] { }, type);
ILGenerator igen = dmethod.GetILGenerator();
if (!type.IsValueType)
{
ConstructorInfo ci = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, new CallingConventions(), Type.EmptyTypes, null);
igen.Emit(OpCodes.Newobj, ci);
igen.Emit(OpCodes.Castclass, type);
igen.Emit(OpCodes.Ret);
}
else
{
LocalBuilder lb = igen.DeclareLocal(type);
igen.Emit(OpCodes.Ldloca_S, lb);
igen.Emit(OpCodes.Initobj, type);
igen.Emit(OpCodes.Ldloc_0);
igen.Emit(OpCodes.Box, type);
igen.Emit(OpCodes.Ret);
}
_createInstance = (ConstructorDelegate)dmethod.CreateDelegate(typeof(ConstructorDelegate));