Bazen ben göstererek kolayca Jon Skeet ve Eric Lippert gibilerin cevaplandırılır Yığın taşması uç örnekleri ve diğer garabeti ile ilgili sorular bkz , dil ve birçok inceliklerini derin bilgiye bunun gibi:
Bir kullanmak için olduğunu düşünebilirsiniz
foreach
döngü, koleksiyonu uygulamalıdır üzerinden yineleme edilirIEnumerable
veyaIEnumerable<T>
. Fakat ortaya çıktığı gibi, bu aslında bir gereklilik değildir. Gerekli olan, koleksiyonun türünün adlandırılan bir genel yöntemeGetEnumerator
sahip olması ve çağrılan bir genel özellik alıcısıCurrent
veMoveNext
geri dönen bir genel yöntemi olan bir tür döndürmesi gerektiğidirbool
. Derleyici tüm bu gereksinimlerin karşılandığını belirleyebilirse, bu yöntemleri kullanmak için kod üretilir. Bu gereksinimler biz nesne uygulayan olmadığını görmek için kontrol edebilirim yerine getirilmediği Sadece eğerIEnumerable
yaIEnumerable<T>
.
Bunu bilmek harika şeyler. Eric'in bunu neden bildiğini anlayabiliyorum; Derleyici ekibinde, bu yüzden bilmek zorunda. Peki ya içerden derin olmayan bilgiyi gösterenler?
Ölümlüler (C # derleyici ekibinde olmayanlar) böyle şeyleri nasıl öğrenir?
Spesifik olarak, bu kişilerin bu tür bilgileri sistematik olarak kökten çıkarmak, araştırmak ve içselleştirmek (kendileri) yapmak için kullandıkları yöntemler var mı?