65.9K
CodeProject is changing. Read more.
Home

Following object inheritance

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1 vote)

Jul 21, 2010

CPOL
viewsIcon

4206

OriginalGriff has made a nice and small class. But I don't think I would use this code in an application. Most times when I want to know about the inheritance chain of an object is while I'm coding. So a quick and nice (commandline?) tool would be a better fit, I think. The problem with...

OriginalGriff has made a nice and small class. But I don't think I would use this code in an application. Most times when I want to know about the inheritance chain of an object is while I'm coding. So a quick and nice (commandline?) tool would be a better fit, I think. The problem with OriginalGriff's solution is that I always have to reference the assembly containing the type. So if I create a tool and then use the "TypeInheritance" class, I will have to add a reference to the assembly containing the type, otherwise it would be impossible to call the constructor. To avoid this problem, I created a (very quick ;) ) commandline tool based on the parsing capability of the Type.GetType(String) method:
using System;
using System.Collections.Generic;
namespace InheritanceChain
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                Type typeWithUnknownInheritanceChain = Type.GetType(args[0]);
                if (typeWithUnknownInheritanceChain != null)
                {
                    List<Type> listTypes = GetInheritanceChain(typeWithUnknownInheritanceChain);
                    foreach (Type type in listTypes)
                        Console.WriteLine(type.FullName);
                    return;
                }
            }
            ShowHelp();
        }
        static List<Type> GetInheritanceChain(Type type)
        {
            List<Type> listTypes = new List<Type>();
            while (type != null)
            {
                listTypes.Add(type);
                type = type.BaseType;
            }
            listTypes.Reverse();
            return listTypes;
        }
        static void ShowHelp()
        {
            Console.WriteLine("Syntax: InheritanceChain TypeName");
            Console.WriteLine("TypeName\tInheritanceChain see MSDN Help about Type.GetType(String) Method for possible TypeName strings");
            Console.WriteLine("Example: InheritanceChain \"System.Windows.Forms.Form,System.Windows.Forms,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\"");
        }
    }
}
But most times when I work with Visual Studio, I just use the object browser to find out about the inheritance chain.