Examining a Type in .NET C#
September 24, 2014 Leave a comment
You can get hold of Types in a variety of ways. You can extract the Types available in an Assembly as follows:
Assembly executingAssembly = Assembly.GetExecutingAssembly(); Type[] typesAttachedToAssembly = executingAssembly.GetTypes(); Console.WriteLine("Types attached to executing assembly: "); foreach (Type type in typesAttachedToAssembly) { Console.WriteLine(type.FullName); }
In my case I have the following types in the executing assembly:
You can also extract the types within a single Module of an assembly:
Module[] modulesInCallingAssembly = executingAssembly.GetModules(); foreach (Module module in modulesInCallingAssembly) { Console.WriteLine("Module {0}: ", module.Name); Type[] typesAttachedToModule = module.GetTypes(); foreach (Type type in typesAttachedToModule) { Console.WriteLine(type.FullName); } }
…which outputs the following:
You can construct Types without reflection using the GetType method and the typeof keyword. Say you have a simple Customer object:
public class Customer { public string Name { get; set; } }
…then you can get its type in the following ways:
Type customerType = customer.GetType(); Console.WriteLine(customerType.FullName); Type customerTypeRevisited = typeof(Customer); Console.WriteLine(customerTypeRevisited.FullName);
These will yield the same result:
Once you have a Type you can inspect it through a myriad of properties. Here comes a short extract:
Console.WriteLine("Full name: {0}", customerType.FullName); Console.WriteLine("Namespace: {0}", customerType.Namespace); Console.WriteLine("Is primitive? {0}", customerType.IsPrimitive); Console.WriteLine("Is abstract? {0}", customerType.IsAbstract); Console.WriteLine("Is class? {0}", customerType.IsClass); Console.WriteLine("Is public? {0}", customerType.IsPublic); Console.WriteLine("Is nested? {0}", customerType.IsNested);
There are methods available on the Type object to read all sorts of information that can be reflected on: interfaces, constructors, properties, methods etc. We’ll look at those separately.
View all posts on Reflection here.