home *** CD-ROM | disk | FTP | other *** search
- /*=====================================================================
- File: CSharpMethodInfo.cs
-
- Summary: Extends LangMethodInfo to provide a CSharp-specific version
- of reflection for ease of use in a CSharp-based environment.
-
- ---------------------------------------------------------------------
- This file is part of the Microsoft NGWS SDK Code Samples.
-
- Copyright (C) 2000 Microsoft Corporation. All rights reserved.
-
- This source code is intended only as a supplement to Microsoft
- Development Tools and/or on-line documentation. See these other
- materials for detailed information regarding Microsoft code samples.
-
- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
- PARTICULAR PURPOSE.
- =====================================================================*/
-
- namespace LangUtil {
-
- using System;
- using System.Text;
- using System.Reflection;
- using System.Collections;
-
- public class CSharpMethodInfo : LangMethodInfo
- {
- // Call base class constructor for all LangMethodInfos
- public CSharpMethodInfo( MethodInfo myMethod ) : base( myMethod )
- {
- }
-
- // Implemented to return this language type
- public CSharpLangType ReturnLangType
- {
- get { return new CSharpLangType( m_ThisMethodInfo.ReturnType ); }
- }
-
- // Overridden to provide an ArrayList that contains CSharpLangTypes
- protected override ArrayList GetParamList( ParameterInfo[] ParamArray )
- {
- ArrayList ParamList = new ArrayList( ParamArray.Length );
- for ( int x = 0; x < ParamArray.Length; x++ )
- {
- ParamList.Add( new CSharpLangType( ParamArray[x] ) );
- }
- return ParamList;
- }
-
- public string Attributes
- {
- override get
- {
- StringBuilder sb = new StringBuilder();
-
- if ( m_ThisMethodInfo.IsPublic )
- sb.Append( "public " );
- else if ( m_ThisMethodInfo.IsPrivate )
- sb.Append( "private " );
- else if ( m_ThisMethodInfo.IsFamily )
- sb.Append( "protected " );
- else if ( m_ThisMethodInfo.IsAssembly )
- sb.Append( "internal " );
- else if ( m_ThisMethodInfo.IsFamilyAndAssembly )
- sb.Append( "FamilyAndAssembly " );
- else if ( m_ThisMethodInfo.IsFamilyOrAssembly )
- sb.Append( "FamilyOrAssembly " );
-
- // This material is implicit in interfaces
- if ( !m_ThisMethodInfo.DeclaringType.IsInterface )
- {
- if ( m_ThisMethodInfo.IsAbstract )
- sb.Append( "abstract " );
- if ( m_ThisMethodInfo.IsVirtual && !m_ThisMethodInfo.IsAbstract )
- {
- ParameterInfo[] p = m_ThisMethodInfo.GetParameters();
- Type [] param_types = new Type[p.Length];
- for ( int i = 0; i < param_types.Length; i++ )
- {
- param_types[i] = p[i].ParameterType;
- }
-
- Type superClass = m_ThisMethodInfo.ReflectedType.BaseType;
-
- MethodInfo baseImpl = (superClass == null) ? null : superClass.GetMethod( m_Name, param_types );
-
- if ( baseImpl == null )
- {
- sb.Append( "virtual " );
- }
- else if ( m_ThisMethodInfo.DeclaringType == m_ThisMethodInfo.ReflectedType )
- {
- sb.Append( "override " );
- }
- }
- }
-
- if ( m_ThisMethodInfo.IsStatic )
- sb.Append( "static " );
-
- return sb.ToString();
- }
- }
-
- public String ShortTextDeclaration
- {
- get
- {
- StringBuilder Syntax = new StringBuilder( m_Name + "(" );
-
- for ( int i = 0; i < m_Parameters.Count; i++ )
- {
- Syntax.Append( ( (CSharpLangType)m_Parameters[i]).ClassName );
- if ( ((CSharpLangType)m_Parameters[i]).IsRealArray )
- Syntax.Append( "[]" );
-
- // Wites the comma, or the last break
- if ( i != ( m_Parameters.Count - 1 ) )
- Syntax.Append( ", " );
- else
- {
- // If there's varargs
- if ( VarArgs )
- {
- Syntax.Append( ", " );
- Syntax.Append( "..." );
- }
- }
- }
- Syntax.Append( ")" );
- return Syntax.ToString();
- }
- }
-
- public String TextDeclaration
- {
- override get
- {
- StringBuilder Syntax = new StringBuilder( Attributes );
-
- if ( ReturnLangType.m_IsByRef )
- Syntax.Append( "ref " );
-
- Syntax.Append( ReturnLangType.ClassName );
-
- if ( ReturnLangType.IsRealArray )
- Syntax.Append( "[]" );
-
- Syntax.Append( " " + m_Name + "(" );
-
- for ( int i = 0; i < m_Parameters.Count; i++ )
- {
- if ( ( (CSharpLangType)m_Parameters[i] ).m_IsByRef )
- Syntax.Append( "ref " );
-
- Syntax.Append( ( (CSharpLangType)m_Parameters[i] ).ClassName );
-
- if ( ( (CSharpLangType)m_Parameters[i] ).IsRealArray )
- Syntax.Append( "[]" );
-
-
- Syntax.Append( " " );
- Syntax.Append( ( (CSharpLangType)m_Parameters[i] ).ParamVarName );
-
- // Writes the comma, or the last break
- if ( i != (m_Parameters.Count - 1 ) )
- Syntax.Append( ", " );
- else
- {
- // If there's varargs
- if ( VarArgs )
- {
- Syntax.Append( ", " );
- Syntax.Append( "..." );
- }
- }
- }
- Syntax.Append( ");" );
- return Syntax.ToString();
- }
- }
-
- public String HTMLDeclaration
- {
- override get
- {
- StringBuilder Syntax = new StringBuilder( "<PRE class=\"Syntax\">" );
- Syntax.Append( "<span style=\"color:red\">[CSharp]</span><BR/><B>" );
- Syntax.Append( Attributes );
-
- if ( ReturnLangType.m_IsByRef )
- Syntax.Append( "ref " );
- Syntax.Append( ReturnLangType.ClassName );
- if ( ReturnLangType.IsRealArray )
- Syntax.Append( "[]" );
-
- Syntax.Append( " " + m_Name + "(" );
-
- for ( int i = 0; i < m_Parameters.Count; i++ )
- {
- Syntax.Append( "<BR/> " );
- if ( ( (CSharpLangType)m_Parameters[i] ).IsByRef )
- Syntax.Append("ref ");
- Syntax.Append( ((CSharpLangType)m_Parameters[i] ).ClassName );
- if ( ((CSharpLangType)m_Parameters[i] ).IsRealArray )
- Syntax.Append( "[]" );
-
- Syntax.Append( " <I>" + ( (CSharpLangType)m_Parameters[i] ).ParamVarName + "</I>" );
-
- // Writes the comma, or the last break
- if ( i != (m_Parameters.Count - 1 ) )
- Syntax.Append( ", " );
- else
- {
- // If there's varargs
- if ( VarArgs )
- {
- Syntax.Append( ", <BR/> ..." );
- }
- Syntax.Append( "<BR/>" );
- }
- }
- Syntax.Append( ");</B></PRE>" );
- return Syntax.ToString();
- }
- }
- }
-
- } // namespace LangUtil
-