Если вы посмотрите на объявление GetType () в Reflector, вы найдете это:
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern Type GetType();
Что означает эта комбинация атрибута и extern, так это то, что этот метод фактически реализован в неуправляемом коде внутри самой среды выполнения .NET. Вопрос GUID в этой статье углубляется в детали. Очевидно, они сделали это по соображениям производительности, решив, что вычисление Type будет быстрее, если обработать его на более низком уровне.
Это приводит к двум причинам, по которым метод GetType не реализуется как свойство. Во-первых, вы не можете определять свойства extern так, как вы можете с помощью методов, поэтому это должно быть обработано в собственном коде .NET. Во-вторых, даже если бы вы могли определить их как внешние, выполнение небезопасного, неуправляемого вызова изнутри свойства определенно нарушило бы правила использования свойства, поскольку гораздо сложнее гарантировать отсутствие побочных эффектов.