Re[2]: Создать объект на основе данных Type
От: Chardex Россия  
Дата: 31.08.06 12:59
Оценка: 1 (1)
Здравствуйте, 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));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.