Der TypeDescriptor und ICustomTypeDescriptor
Wenn man den TypeDescriptor verwendet, um zum Beispiel an die Properties eines Objektes zu gelangen, dann gibt es da zwei Methode: Die eine bekommt ein Objekt, die anderen einen Typ. (Die gibt es dann mit mehreren Geschmacksrichtungen wie zum Beispiel Filter...)
Auf den ersten Blick ist nicht ersichtlich warum es überhaupt zwei davon gibt: Wenn man ein Objekt hat, kann man per GetType() schliesslich einfach an den Typ kommen - es würde also eine Methode in TypeDescriptor reichen. Die Dokumentation sagt auch nicht viel dazu aus, und wen man ein kleines Testprogramm mit ein paar Properties schreibt, dann bekommt man auch in beiden Fällen das gleiche.
Allerdings nicht immer - und zwar dann nicht, wenn der Typ "ICustomTypeDescriptor" implementiert. Tut er das, dann bekommt man mit TypeDescriptor.GetProperties( Type ) die "Original" Properties, und mit GetProperties( object) die "CustomProperties".
Das ist auch sinnvoll: Irgendwie muss die Implementierung von ICustomTypeDescriptor ja an die "Original" Properties drankommen - und das geht dann eben über GetProperties( Type).