2010-06-30 21 views
14

C# içinde typeof için "yöntem gövdesi" neye benzeyeceğini merak ediyorum (bir yöntem değil bir anahtar sözcük olarak reflektörde alabildiğimden emin değilim).'typeof' nasıl çalışır?

Bunun, GetType (sihirli dönüştürme sembolü dizgisine eşdeğerdir) ile eşdeğer olduğunu tahmin ediyorum.

Reflektör'de GetType (dizgi) 'ye bakarak, "RuntimeTypeHandle.GetTypeByName" adlı bir "PrivateGetType" yöntemini çağırır ve RuntimeTypeHandle, içindeki türlerin arkasında mantığa sahip gibi görünüyor, ancak GetTypeByName öğelerinin özelliği yok Reflektör'de görün.

cevap

13

gibi bir şey yaparsanız:

Type t = typeof(string); 

Sonra derleyici bir ldtoken MSIL talimatına typeof(string) bit derler ve daha sonra Type sınıfının bir örneğini almak için Type.GetTypeFromHandle çağırır.

Type.GetTypeFromHandle (o "MethodImplOptions.InternalCall" özelliğine sahip işaretlenmiş neden olan) çalışma zamanı tarafından uygulanmaktadır. Gerçekte nasıl uygulandığına dair kaynak koduna bakabilirsiniz, ancak temel olarak Type ve arkadaşların dahili olarak nasıl çalıştığını anlamak için tüm meta veri sistemini anlamanız gerekir ...

+0

Teşekkürler. GetTypeFromHandle'ın da extern olduğunu söylediğin gibi, bu tür bir şey için monoya bakmayı düşünmüştüm, bu yüzden zaman yatırımına değer olabilir. –