GetType() gibt dir ein Type-Objekt von dem Typen, den das Objekt hat, wo Du es aufrufst.
typeof() gibt dir ein Type-Objekt von dem Typ, den Du explizit angibst - ohne konkretes Objekt
C#-Quelltext
1: 2: 3:
| var a = typeof(Program); var b = new Program().GetType(); var c = a == b; |
GetType() gibt dir auch immer den tatsächlichen Typen zurück, also auch, wenn es eine Ableitung ist, die Du gar nicht kennst.
is: Ja
as: Ja
as gibt dir null zurück, wenn das Objekt nicht dem Typ entspricht.
Daher kannst Du das auch nur bei Referenz-Typen nutzen, structs erlauben kein null.