public DynamicMethodHandle(MethodInfo info, params object[] parameters)
 {
     if (info == null)
     {
         this.DynamicMethod = null;
     }
     else
     {
         this.MethodName = info.Name;
         var      infoParams = info.GetParameters();
         object[] inParams   = null;
         if (parameters == null)
         {
             inParams = new object[] { null };
         }
         else
         {
             inParams = parameters;
         }
         var pCount = infoParams.Length;
         if (pCount > 0 &&
             ((pCount == 1 && infoParams[0].ParameterType.IsArray) ||
              (infoParams[pCount - 1].GetCustomAttributes(typeof(ParamArrayAttribute), true).Length > 0)))
         {
             this.HasFinalArrayParam    = true;
             this.MethodParamsLength    = pCount;
             this.FinalArrayElementType = infoParams[pCount - 1].ParameterType;
         }
         this.DynamicMethod = DynamicMethodHandlerFactory.CreateMethod(info);
     }
 }
 public DynamicMemberHandle(PropertyInfo info) :
     this(
         info.Name,
         info.PropertyType,
         DynamicMethodHandlerFactory.CreatePropertyGetter(info),
         DynamicMethodHandlerFactory.CreatePropertySetter(info))
 {
 }
 public DynamicMemberHandle(FieldInfo info) :
     this(
         info.Name,
         info.FieldType,
         DynamicMethodHandlerFactory.CreateFieldGetter(info),
         DynamicMethodHandlerFactory.CreateFieldSetter(info))
 {
 }
Пример #4
0
        private static DynamicCtorDelegate GetCachedConstructor(Type objectType)
        {
            DynamicCtorDelegate result = null;

            if (!_ctorCache.TryGetValue(objectType, out result))
            {
                lock (_ctorCache)
                {
                    if (!_ctorCache.TryGetValue(objectType, out result))
                    {
                        ConstructorInfo info =
                            objectType.GetConstructor(ctorFlags, null, Type.EmptyTypes, null);
                        result = DynamicMethodHandlerFactory.CreateConstructor(info);
                        _ctorCache.Add(objectType, result);
                    }
                }
            }
            return(result);
        }