When does the UnderlyingSystemType differ from the current Type instance

.net, base-class-library, c#, clr

Solution

To be honest I never did it by myself, but I know that it is possible to create your own `RuntimeType` like definition of your specified type.

If you notice the `Type` class is abstract and has a lot of abstract memebers. What happens is that your type (whatever is it) automatically creates `RuntimeType` derived from `Type` class and implements it for your type.

So the property `UnderlyingSystemType` in case of orindary `RuntimeType` will return `Type` property equal value, in case of overriden implementation, instead, (that is for influencing relfection behavior, but I repeat I personally never did this before), will return user-defined type value.

EDIT

Actually the link provided by guys in comments is a good one:

When is a Type not a Type?

Problem

`System.Type` contains an `UnderlyingSystemType` property. MSDN states that it: Indicates the type provided by the common language runtime that represents this type. In most cases, this property simply returns the current `Type` instance. My question is, in what circumstances does this property not return the current `Type` instance itself. And in those cases, what sort of type will be the current `Type` instance and the returned underlying system type be?

Original source