System.Type

The abstract class Type, defined in the System namespace, is an abstraction of a .NET CLR type. Every .NET type, be it a .NET-provided type (from value types such as integers and enums to classes and interfaces) or a developer-defined type, has a corresponding unique Type value.

Tip

The ability to uniquely identify a type by means of a Type object is analogous to the COM idea of identifying the type of a component by means of its unique CLSID.

The canonical base class of any .NET type is System.Object. Object (or just object in C#) has built-in support for retrieving the Type associated with any object by calling its GetType() method:

    public class Object
    {
       public Type GetType();
       //Other methods
    }

Having GetType() present in object allows you to call it on any .NET object:

    public class MyClass
    {...}

    int number = 0;
    MyClass obj = new MyClass();

    Type type1 = number.GetType();
    Type type2 = obj.GetType();

Different instances of the same type must return the same Type value:

    int number1 = 1;
    int number2 = 2;

    Type type1 = number1.GetType();
    Type type2 = number2.GetType();

    Debug.Assert(type1 
            == 
            type2);

The typeof operator allows you to retrieve the Type associated with a type directly, without instantiating an object of that type:

    Type type1 = typeof(int);
    Type type2 = typeof(MyClass);

Type is your gateway to obtaining the metadata associated with a given type. To start, Type.ToString() returns the type’s name:

 Type type = typeof(MyClass); string name = type.ToString(); Debug.Assert(name ...

Get Programming .NET Components, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.