Click here to Skip to main content
15,885,767 members
Articles / Programming Languages / C#
Alternative
Tip/Trick

Following object inheritance

Rate me:
Please Sign up or sign in to vote.
5.00/5 (3 votes)
31 Jul 2010CPOL 4.9K   1  
namespace System{ public static class SystemExtensionMethods { public static string GetAncestry( this object target ) { return string.Join( " -> ", target.GetTypes().Reverse().Select( t => FormatName( t ) ).ToArray() ); } public...
C#
namespace System
{
   public static class SystemExtensionMethods
   {
      public static string GetAncestry( this object target )
      {
         return string.Join( " -> ",
            target.GetTypes().Reverse().Select( t => FormatName( t ) ).ToArray() );
      }

      public static IEnumerable<Type> GetTypes( this object target )
      {
         for( Type t = target.GetType(); t != null; t = t.BaseType )
            yield return t;
      }

      // Based on code from bjarneds, in:
      // http://www.codeproject.com/kb/dotnet/objectspy.aspx (ObjectInfo.cs)

      public static string FormatName( this Type type )
      {
         return FormatName( type, TypeNameLanguage.CSharp );
      }

      public static string FormatName( this Type type, TypeNameLanguage format )
      {
         if( !type.IsGenericType )
            return type.Name;
         int pos = type.Name.LastIndexOf( '`' );
         string name = ( pos >= 0 ? type.Name.Substring( 0, pos ) : type.Name );
         return name + (format == TypeNameLanguage.CSharp ? "<" : "(Of ")
            + string.Join( ",", type.GetGenericArguments()
                              .Select( t => FormatName( t, format ) ).ToArray() )
            + (format == TypeNameLanguage.CSharp ? ">" : ")");
      }

      public enum TypeNameLanguage
      {
         CSharp = 0, VB = 1
      }
   }
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
-- There are no messages in this forum --