The Labs \ Source Viewer \ SSCLI \ System.Reflection.Emit \ ConstructorBuilder

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace System.Reflection.Emit
  16. {
  17.     using System;
  18.     using System.Reflection;
  19.     using CultureInfo = System.Globalization.CultureInfo;
  20.     using System.Diagnostics.SymbolStore;
  21.     using System.Security;
  22.     using System.Security.Permissions;
  23.     using System.Runtime.InteropServices;
  24.    
  25.     [HostProtection(MayLeakOnAbort = true)]
  26.     [ClassInterface(ClassInterfaceType.None)]
  27.     [ComDefaultInterface(typeof(_ConstructorBuilder))]
  28.     [System.Runtime.InteropServices.ComVisible(true)]
  29.     public sealed class ConstructorBuilder : ConstructorInfo, _ConstructorBuilder
  30.     {
  31.         #region Private Data Members
  32.         internal MethodBuilder m_methodBuilder;
  33.         internal bool m_ReturnILGen;
  34.         #endregion
  35.        
  36.         #region Constructor
  37.         private ConstructorBuilder()
  38.         {
  39.         }
  40.        
  41.         internal ConstructorBuilder(string name, MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers, Module mod, TypeBuilder type)
  42.         {
  43.             int sigLength;
  44.             byte[] sigBytes;
  45.             MethodToken token;
  46.            
  47.             m_methodBuilder = new MethodBuilder(name, attributes, callingConvention, null, null, null, parameterTypes, requiredCustomModifiers, optionalCustomModifiers, mod,
  48.             type, false);
  49.            
  50.             type.m_listMethods.Add(m_methodBuilder);
  51.            
  52.             sigBytes = m_methodBuilder.GetMethodSignature().InternalGetSignature(out sigLength);
  53.            
  54.             token = m_methodBuilder.GetToken();
  55.             m_ReturnILGen = true;
  56.         }
  57.        
  58.         internal ConstructorBuilder(string name, MethodAttributes attributes, CallingConventions callingConvention, Type[] parameterTypes, Module mod, TypeBuilder type) : this(name, attributes, callingConvention, parameterTypes, null, null, mod, type)
  59.         {
  60.         }
  61.        
  62.         #endregion
  63.        
  64.         #region Internal
  65.         internal override Type[] GetParameterTypes()
  66.         {
  67.             return m_methodBuilder.GetParameterTypes();
  68.         }
  69.        
  70.         #endregion
  71.        
  72.         #region Object Overrides
  73.         public override string ToString()
  74.         {
  75.             return m_methodBuilder.ToString();
  76.         }
  77.        
  78.         #endregion
  79.        
  80.         #region MemberInfo Overrides
  81.         internal override int MetadataTokenInternal {
  82.             get { return m_methodBuilder.MetadataTokenInternal; }
  83.         }
  84.        
  85.         public override Module Module {
  86.             get { return m_methodBuilder.Module; }
  87.         }
  88.        
  89.         public override Type ReflectedType {
  90.             get { return m_methodBuilder.ReflectedType; }
  91.         }
  92.        
  93.         public override Type DeclaringType {
  94.             get { return m_methodBuilder.DeclaringType; }
  95.         }
  96.        
  97.         public override string Name {
  98.             get { return m_methodBuilder.Name; }
  99.         }
  100.        
  101.         #endregion
  102.        
  103.         #region MethodBase Overrides
  104.         public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
  105.         {
  106.            
  107.             throw new NotSupportedException(Environment.GetResourceString("NotSupported_DynamicModule"));
  108.         }
  109.        
  110.         public override ParameterInfo[] GetParameters()
  111.         {
  112.             if (!m_methodBuilder.m_bIsBaked)
  113.                 throw new NotSupportedException(Environment.GetResourceString("InvalidOperation_TypeNotCreated"));
  114.            
  115.             Type rti = m_methodBuilder.GetTypeBuilder().m_runtimeType;
  116.             ConstructorInfo rci = rti.GetConstructor(m_methodBuilder.m_parameterTypes);
  117.            
  118.             return rci.GetParameters();
  119.         }
  120.        
  121.         public override MethodAttributes Attributes {
  122.             get { return m_methodBuilder.Attributes; }
  123.         }
  124.        
  125.         public override MethodImplAttributes GetMethodImplementationFlags()
  126.         {
  127.             return m_methodBuilder.GetMethodImplementationFlags();
  128.         }
  129.        
  130.         public override RuntimeMethodHandle MethodHandle {
  131.             get { return m_methodBuilder.MethodHandle; }
  132.         }
  133.        
  134.         #endregion
  135.        
  136.         #region ConstructorInfo Overrides
  137.         public override object Invoke(BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
  138.         {
  139.            
  140.             throw new NotSupportedException(Environment.GetResourceString("NotSupported_DynamicModule"));
  141.         }
  142.        
  143.         #endregion
  144.        
  145.         #region ICustomAttributeProvider Implementation
  146.         public override object[] GetCustomAttributes(bool inherit)
  147.         {
  148.             return m_methodBuilder.GetCustomAttributes(inherit);
  149.         }
  150.        
  151.         public override object[] GetCustomAttributes(Type attributeType, bool inherit)
  152.         {
  153.             return m_methodBuilder.GetCustomAttributes(attributeType, inherit);
  154.         }
  155.        
  156.         public override bool IsDefined(Type attributeType, bool inherit)
  157.         {
  158.             return m_methodBuilder.IsDefined(attributeType, inherit);
  159.         }
  160.        
  161.         #endregion
  162.        
  163.         #region Public Members
  164.         public MethodToken GetToken()
  165.         {
  166.             return m_methodBuilder.GetToken();
  167.         }
  168.        
  169.         public ParameterBuilder DefineParameter(int iSequence, ParameterAttributes attributes, string strParamName)
  170.         {
  171.             // MD will assert if we try to set the reserved bits explicitly
  172.             attributes = attributes & ~ParameterAttributes.ReservedMask;
  173.             return m_methodBuilder.DefineParameter(iSequence, attributes, strParamName);
  174.         }
  175.        
  176.         public void SetSymCustomAttribute(string name, byte[] data)
  177.         {
  178.             m_methodBuilder.SetSymCustomAttribute(name, data);
  179.         }
  180.        
  181.         public ILGenerator GetILGenerator()
  182.         {
  183.             if (!m_ReturnILGen)
  184.                 throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_DefaultConstructorILGen"));
  185.            
  186.             return m_methodBuilder.GetILGenerator();
  187.         }
  188.        
  189.         public ILGenerator GetILGenerator(int streamSize)
  190.         {
  191.             if (!m_ReturnILGen)
  192.                 throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_DefaultConstructorILGen"));
  193.            
  194.             return m_methodBuilder.GetILGenerator(streamSize);
  195.         }
  196.        
  197.         public void AddDeclarativeSecurity(SecurityAction action, PermissionSet pset)
  198.         {
  199.             if (pset == null)
  200.                 throw new ArgumentNullException("pset");
  201.            
  202.             if (!Enum.IsDefined(typeof(SecurityAction), action) || action == SecurityAction.RequestMinimum || action == SecurityAction.RequestOptional || action == SecurityAction.RequestRefuse)
  203.                 throw new ArgumentOutOfRangeException("action");
  204.            
  205.             // Cannot add declarative security after type is created.
  206.             if (m_methodBuilder.IsTypeCreated())
  207.                 throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_TypeHasBeenCreated"));
  208.            
  209.             // Translate permission set into serialized format (use standard binary serialization).
  210.             byte[] blob = pset.EncodeXml();
  211.            
  212.             // Write the blob into the metadata.
  213.             TypeBuilder.InternalAddDeclarativeSecurity(GetModule(), GetToken().Token, action, blob);
  214.         }
  215.        
  216.         public override CallingConventions CallingConvention {
  217.             get {
  218.                 if (DeclaringType.IsGenericType)
  219.                     return CallingConventions.HasThis;
  220.                
  221.                 return CallingConventions.Standard;
  222.             }
  223.         }
  224.        
  225.         public Module GetModule()
  226.         {
  227.             return m_methodBuilder.GetModule();
  228.         }
  229.        
  230.        
  231.         public Type ReturnType {
  232.             get { return m_methodBuilder.GetReturnType(); }
  233.         }
  234.        
  235.         internal override Type GetReturnType()
  236.         {
  237.             return m_methodBuilder.GetReturnType();
  238.         }
  239.        
  240.         public string Signature {
  241.             get { return m_methodBuilder.Signature; }
  242.         }
  243.        
  244.         [System.Runtime.InteropServices.ComVisible(true)]
  245.         public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
  246.         {
  247.             m_methodBuilder.SetCustomAttribute(con, binaryAttribute);
  248.         }
  249.        
  250.         public void SetCustomAttribute(CustomAttributeBuilder customBuilder)
  251.         {
  252.             m_methodBuilder.SetCustomAttribute(customBuilder);
  253.         }
  254.        
  255.         public void SetImplementationFlags(MethodImplAttributes attributes)
  256.         {
  257.             m_methodBuilder.SetImplementationFlags(attributes);
  258.         }
  259.        
  260.         public bool InitLocals {
  261.             get { return m_methodBuilder.InitLocals; }
  262.             set { m_methodBuilder.InitLocals = value; }
  263.         }
  264.        
  265.         #endregion
  266.        
  267.         void _ConstructorBuilder.GetTypeInfoCount(out uint pcTInfo)
  268.         {
  269.             throw new NotImplementedException();
  270.         }
  271.        
  272.         void _ConstructorBuilder.GetTypeInfo(uint iTInfo, uint lcid, IntPtr ppTInfo)
  273.         {
  274.             throw new NotImplementedException();
  275.         }
  276.        
  277.         void _ConstructorBuilder.GetIDsOfNames(        [In()]
  278. ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
  279.         {
  280.             throw new NotImplementedException();
  281.         }
  282.        
  283.         void _ConstructorBuilder.Invoke(uint dispIdMember,         [In()]
  284. ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
  285.         {
  286.             throw new NotImplementedException();
  287.         }
  288.     }
  289. }

Developer Fusion