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

  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. using System;
  16. using System.Reflection;
  17. using System.Reflection.Emit;
  18. using System.Collections;
  19. using System.Globalization;
  20. namespace System.Reflection.Emit
  21. {
  22.     internal sealed class MethodBuilderInstantiation : MethodInfo
  23.     {
  24.         #region Static Members
  25.         static internal MethodInfo MakeGenericMethod(MethodInfo method, Type[] inst)
  26.         {
  27.             if (!method.IsGenericMethodDefinition)
  28.                 throw new InvalidOperationException();
  29.            
  30.             return new MethodBuilderInstantiation(method, inst);
  31.         }
  32.        
  33.         #endregion
  34.        
  35.         #region Private Data Mebers
  36.         internal MethodInfo m_method;
  37.         private Type[] m_inst;
  38.         #endregion
  39.        
  40.         #region Constructor
  41.         internal MethodBuilderInstantiation(MethodInfo method, Type[] inst)
  42.         {
  43.             m_method = method;
  44.             m_inst = inst;
  45.         }
  46.         #endregion
  47.        
  48.         internal override Type[] GetParameterTypes()
  49.         {
  50.             return m_method.GetParameterTypes();
  51.         }
  52.        
  53.         #region MemberBase
  54.         public override MemberTypes MemberType {
  55.             get { return m_method.MemberType; }
  56.         }
  57.         public override string Name {
  58.             get { return m_method.Name; }
  59.         }
  60.         public override Type DeclaringType {
  61.             get { return m_method.DeclaringType; }
  62.         }
  63.         public override Type ReflectedType {
  64.             get { return m_method.ReflectedType; }
  65.         }
  66.         public override object[] GetCustomAttributes(bool inherit)
  67.         {
  68.             return m_method.GetCustomAttributes(inherit);
  69.         }
  70.         public override object[] GetCustomAttributes(Type attributeType, bool inherit)
  71.         {
  72.             return m_method.GetCustomAttributes(attributeType, inherit);
  73.         }
  74.         public override bool IsDefined(Type attributeType, bool inherit)
  75.         {
  76.             return m_method.IsDefined(attributeType, inherit);
  77.         }
  78.         internal override int MetadataTokenInternal {
  79.             get {
  80.                 throw new NotSupportedException();
  81.             }
  82.         }
  83.         public override Module Module {
  84.             get { return m_method.Module; }
  85.         }
  86.         public new Type GetType()
  87.         {
  88.             return base.GetType();
  89.         }
  90.         #endregion
  91.        
  92.         #region MethodBase Members
  93.         public override ParameterInfo[] GetParameters()
  94.         {
  95.             throw new NotSupportedException();
  96.         }
  97.         public override MethodImplAttributes GetMethodImplementationFlags()
  98.         {
  99.             return m_method.GetMethodImplementationFlags();
  100.         }
  101.         public override RuntimeMethodHandle MethodHandle {
  102.             get {
  103.                 throw new NotSupportedException(Environment.GetResourceString("NotSupported_DynamicModule"));
  104.             }
  105.         }
  106.         public override MethodAttributes Attributes {
  107.             get { return m_method.Attributes; }
  108.         }
  109.         public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
  110.         {
  111.             throw new NotSupportedException();
  112.         }
  113.         public override CallingConventions CallingConvention {
  114.             get { return m_method.CallingConvention; }
  115.         }
  116.         public override Type[] GetGenericArguments()
  117.         {
  118.             return m_inst;
  119.         }
  120.         public override MethodInfo GetGenericMethodDefinition()
  121.         {
  122.             return m_method;
  123.         }
  124.         public override bool IsGenericMethodDefinition {
  125.             get { return false; }
  126.         }
  127.         public override bool ContainsGenericParameters {
  128.             get {
  129.                 for (int i = 0; i < m_inst.Length; i++) {
  130.                     if (m_inst[i].ContainsGenericParameters)
  131.                         return true;
  132.                 }
  133.                
  134.                 if (DeclaringType != null && DeclaringType.ContainsGenericParameters)
  135.                     return true;
  136.                
  137.                 return false;
  138.             }
  139.         }
  140.        
  141.         public override MethodInfo MakeGenericMethod(params Type[] arguments)
  142.         {
  143.             throw new InvalidOperationException(Environment.GetResourceString("Arg_NotGenericMethodDefinition"));
  144.         }
  145.        
  146.         public override bool IsGenericMethod {
  147.             get { return true; }
  148.         }
  149.        
  150.         #endregion
  151.        
  152.         #region Public Abstract\Virtual Members
  153.         internal override Type GetReturnType()
  154.         {
  155.             return m_method.GetReturnType();
  156.         }
  157.         public override ParameterInfo ReturnParameter {
  158.             get {
  159.                 throw new NotSupportedException();
  160.             }
  161.         }
  162.         public override ICustomAttributeProvider ReturnTypeCustomAttributes {
  163.             get {
  164.                 throw new NotSupportedException();
  165.             }
  166.         }
  167.         public override MethodInfo GetBaseDefinition()
  168.         {
  169.             throw new NotSupportedException();
  170.         }
  171.         #endregion
  172.     }
  173. }

Developer Fusion