/// <summary>
        /// Defines the constructors for class inheriting the specified type.
        /// </summary>
        /// <returns>The <see cref="ConstructorBuilder"/> array representing the generated constructors.</returns>
        protected virtual ConstructorBuilder[] DefineConstructorsForSubClass()
        {
            var constructors        = TypeToIntercept.GetConstructors(BindingFlags.Instance | BindingFlags.Public);
            var constructorBuilders = new ConstructorBuilder[constructors.Length];

            for (int index1 = 0; index1 < constructors.Length; index1++)
            {
                var constructor        = constructors[index1];
                var parameterTypes     = constructor.GetParameters().Select(it => it.ParameterType).ToArray();
                var constructorBuilder = constructorBuilders[index1] = TypeBuilder.DefineConstructor(constructor.Attributes, CallingConventions.HasThis, parameterTypes);
                var il = constructorBuilder.GetILGenerator();

                il.Emit(OpCodes.Ldarg_0);
                for (int index2 = 0; index2 < parameterTypes.Length; index2++)
                {
                    il.EmitLoadArgument(index2);
                }
                il.Emit(OpCodes.Call, constructor);
                il.Emit(OpCodes.Ret);
            }
            return(constructorBuilders);
        }