home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 40 / IOPROG_40.ISO / SOFT / NETFrameworkSDK.exe / comsdk.cab / samples.exe / ClsView / CSharpMethodInfo.cs < prev    next >
Encoding:
Text File  |  2000-06-23  |  8.0 KB  |  233 lines

  1. /*=====================================================================
  2.   File:      CSharpMethodInfo.cs
  3.  
  4.   Summary:  Extends LangMethodInfo to provide a CSharp-specific version
  5.          of reflection for ease of use in a CSharp-based environment.
  6.  
  7. ---------------------------------------------------------------------
  8.   This file is part of the Microsoft NGWS SDK Code Samples.
  9.  
  10.   Copyright (C) 2000 Microsoft Corporation.  All rights reserved.
  11.  
  12. This source code is intended only as a supplement to Microsoft
  13. Development Tools and/or on-line documentation.  See these other
  14. materials for detailed information regarding Microsoft code samples.
  15.  
  16. THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  17. KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  18. IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  19. PARTICULAR PURPOSE.
  20. =====================================================================*/
  21.  
  22. namespace LangUtil {
  23.  
  24. using System;
  25. using System.Text;
  26. using System.Reflection;
  27. using System.Collections;
  28.  
  29.    public class CSharpMethodInfo : LangMethodInfo
  30.    {
  31.       // Call base class constructor for all LangMethodInfos
  32.       public CSharpMethodInfo( MethodInfo myMethod ) : base( myMethod )
  33.       {
  34.       }
  35.  
  36.       // Implemented to return this language type
  37.       public CSharpLangType ReturnLangType
  38.       {
  39.          get { return new CSharpLangType( m_ThisMethodInfo.ReturnType ); }
  40.       }
  41.  
  42.       // Overridden to provide an ArrayList that contains CSharpLangTypes
  43.       protected override ArrayList GetParamList( ParameterInfo[] ParamArray )
  44.       {
  45.          ArrayList ParamList = new ArrayList( ParamArray.Length );
  46.          for ( int x = 0; x < ParamArray.Length; x++ )
  47.          {
  48.             ParamList.Add( new CSharpLangType( ParamArray[x] ) );
  49.          }   
  50.          return ParamList;
  51.       }
  52.       
  53.       public string Attributes 
  54.       {
  55.          override get
  56.          {         
  57.             StringBuilder sb = new StringBuilder();
  58.             
  59.             if ( m_ThisMethodInfo.IsPublic )
  60.                sb.Append( "public " );
  61.             else if ( m_ThisMethodInfo.IsPrivate )
  62.                sb.Append( "private " );
  63.             else if ( m_ThisMethodInfo.IsFamily )
  64.                sb.Append( "protected " );
  65.             else if ( m_ThisMethodInfo.IsAssembly )
  66.                sb.Append( "internal " );
  67.             else if ( m_ThisMethodInfo.IsFamilyAndAssembly )
  68.                sb.Append( "FamilyAndAssembly " );
  69.             else if ( m_ThisMethodInfo.IsFamilyOrAssembly )
  70.                sb.Append( "FamilyOrAssembly " );               
  71.                
  72.             // This material is implicit in interfaces
  73.             if ( !m_ThisMethodInfo.DeclaringType.IsInterface )
  74.             {
  75.                if ( m_ThisMethodInfo.IsAbstract )
  76.                   sb.Append( "abstract " );
  77.                if ( m_ThisMethodInfo.IsVirtual && !m_ThisMethodInfo.IsAbstract )
  78.                {
  79.                   ParameterInfo[] p = m_ThisMethodInfo.GetParameters();
  80.                   Type [] param_types = new Type[p.Length];
  81.                   for ( int i = 0; i < param_types.Length; i++ )
  82.                   {
  83.                      param_types[i] = p[i].ParameterType;
  84.                   }
  85.  
  86.                   Type superClass = m_ThisMethodInfo.ReflectedType.BaseType;
  87.  
  88.                   MethodInfo baseImpl = (superClass == null) ? null : superClass.GetMethod( m_Name, param_types );
  89.  
  90.                   if ( baseImpl == null )
  91.                   {
  92.                      sb.Append( "virtual " );
  93.                   }
  94.                   else if ( m_ThisMethodInfo.DeclaringType == m_ThisMethodInfo.ReflectedType )
  95.                   {
  96.                      sb.Append( "override " );
  97.                   }
  98.                }
  99.             }
  100.  
  101.             if ( m_ThisMethodInfo.IsStatic )
  102.                sb.Append( "static " );
  103.             
  104.             return sb.ToString();
  105.          }
  106.       }
  107.  
  108.       public String ShortTextDeclaration
  109.       {
  110.          get 
  111.          {
  112.             StringBuilder Syntax = new StringBuilder( m_Name + "(" );
  113.  
  114.             for ( int i = 0; i < m_Parameters.Count; i++ ) 
  115.             { 
  116.                Syntax.Append( ( (CSharpLangType)m_Parameters[i]).ClassName );
  117.                if ( ((CSharpLangType)m_Parameters[i]).IsRealArray )
  118.                   Syntax.Append( "[]" );
  119.             
  120.                // Wites the comma, or the last break
  121.                if ( i != ( m_Parameters.Count - 1 ) )
  122.                   Syntax.Append( ", " );
  123.                else
  124.                {
  125.                   // If there's varargs
  126.                   if ( VarArgs )
  127.                   {
  128.                      Syntax.Append( ", " );
  129.                      Syntax.Append( "..." );
  130.                   }
  131.                }
  132.             } 
  133.             Syntax.Append( ")" );
  134.             return Syntax.ToString();
  135.          }
  136.       }
  137.  
  138.       public String TextDeclaration
  139.       {
  140.          override get
  141.          {
  142.             StringBuilder Syntax = new StringBuilder( Attributes );
  143.  
  144.             if ( ReturnLangType.m_IsByRef )
  145.                Syntax.Append( "ref " );
  146.  
  147.             Syntax.Append( ReturnLangType.ClassName );
  148.  
  149.             if ( ReturnLangType.IsRealArray )
  150.                Syntax.Append( "[]" );
  151.             
  152.             Syntax.Append( " " + m_Name + "(" );
  153.  
  154.             for ( int i = 0; i < m_Parameters.Count; i++ ) 
  155.             { 
  156.                if ( ( (CSharpLangType)m_Parameters[i] ).m_IsByRef )
  157.                   Syntax.Append( "ref " );
  158.  
  159.                Syntax.Append( ( (CSharpLangType)m_Parameters[i] ).ClassName );
  160.  
  161.                if ( ( (CSharpLangType)m_Parameters[i] ).IsRealArray )
  162.                   Syntax.Append( "[]" );
  163.  
  164.  
  165.                Syntax.Append( " " );
  166.                Syntax.Append( ( (CSharpLangType)m_Parameters[i] ).ParamVarName );
  167.  
  168.                // Writes the comma, or the last break
  169.                if ( i != (m_Parameters.Count - 1 ) )
  170.                   Syntax.Append( ", " );
  171.                else
  172.                {
  173.                   // If there's varargs
  174.                   if ( VarArgs )
  175.                   {
  176.                      Syntax.Append( ", " );
  177.                      Syntax.Append( "..." );
  178.                   }
  179.                }
  180.             } 
  181.             Syntax.Append( ");" );
  182.             return Syntax.ToString();
  183.          }
  184.       }
  185.  
  186.       public String HTMLDeclaration
  187.       {
  188.          override get
  189.          {
  190.             StringBuilder Syntax = new StringBuilder( "<PRE class=\"Syntax\">" );
  191.             Syntax.Append( "<span style=\"color:red\">[CSharp]</span><BR/><B>" );
  192.             Syntax.Append( Attributes );
  193.  
  194.             if ( ReturnLangType.m_IsByRef )
  195.                Syntax.Append( "ref " );
  196.             Syntax.Append( ReturnLangType.ClassName );
  197.             if ( ReturnLangType.IsRealArray )
  198.                Syntax.Append( "[]" );
  199.  
  200.             Syntax.Append( " " + m_Name + "(" );
  201.  
  202.             for ( int i = 0; i < m_Parameters.Count; i++ ) 
  203.             { 
  204.                Syntax.Append( "<BR/>    " );
  205.                if ( ( (CSharpLangType)m_Parameters[i] ).IsByRef )
  206.                   Syntax.Append("ref ");
  207.                Syntax.Append( ((CSharpLangType)m_Parameters[i] ).ClassName );
  208.                if ( ((CSharpLangType)m_Parameters[i] ).IsRealArray )
  209.                   Syntax.Append( "[]" );
  210.  
  211.                Syntax.Append( " <I>" + ( (CSharpLangType)m_Parameters[i] ).ParamVarName + "</I>" );
  212.  
  213.                // Writes the comma, or the last break
  214.                if ( i != (m_Parameters.Count - 1 ) )
  215.                   Syntax.Append( ", " );
  216.                else
  217.                {
  218.                   // If there's varargs
  219.                   if ( VarArgs )
  220.                   {
  221.                      Syntax.Append( ", <BR/>    ..." );
  222.                   }
  223.                   Syntax.Append( "<BR/>" );
  224.                }
  225.             } 
  226.             Syntax.Append( ");</B></PRE>" );
  227.             return Syntax.ToString();
  228.          }
  229.       }
  230.    }
  231.  
  232. } // namespace LangUtil
  233.