30 Kasım 2011 Çarşamba

IEnumerable Nedir

Visual Studio içerisinde bir takım yaralı interfaceler(ara yüzler) yer almakta. Bunlardan bir tanesi de IEnumerable ara yüzü.

IEnumerable, çalışma mantığını pek merak etmediğimiz, fakat sıklıkla kullandığımız “foreach” döngüsünü kullanmamıza sağlamakta.

Array, List, ArrayList, Hashtable vb. birçok koleksiyon IEnumerable sınıfını implement etmiştir. Bu sayede, foreach döngüsünü kullanarak bu koleksiyondaki elemanlara ulaşabilmekteyiz.

Bu ara yüzü biraz daha iyi tanımak için foreach yapısını incelemek gerekiyor. Foreach döngüsünün arka planında while döngüsü yatmakta. Yani run-time anında foreach yapısı while döngüsüne dönmekte. Döngünün ilerleyip; dizideki diğer elemanlara erişebilmesi içinde IEnumerable dan “GetEnumerator” metodu ile IEnumerator sınıfını talep etmekte.

IEnumerator ara yüzü 3 adet metot içermekte, bunlar: MoveNext, Current ve Reset metotlarıdır.

MoveNext metodu; dizideki bir sonraki elemana erişmemize sağlar.

Current metodu; dizinin o anki indeksindeki değeri getirir.

Reset metodu; dizinin indeksini -1’e çeker.

Bu yapıya örnek vermek gerekirse;

Yukarıdaki kodda dizi elemanlarını listbox’a atılmıştır. Foreach döngüsü çalışma anında hemen altındaki while döngüsüne dönüşmüştür.

Konuyu biraz anlamamız için kendi sınıfımızı yaratıp, foreach döngüsünü kullanmaya çalışalım. Ben “Liste” adlı bir sınıf oluşturdum ve bu sınıftan instance alıp foreach yapısında kullanmaya çalıştım.

Kodu derlediğimde Visual Studio hata verdi. Sebebi ise Liste sınıfının “GetEnumerator” metoduna sahip olmaması. YANİ LISTE SINIFININ FOREACH YAPISINI DESTEKLEMEDİĞİ HATASI.

Desteklemesi için sınıfımızın IEnumerable sınıfından türemesi gerekmete.

IEnumerable ara yüzü, “System.Collections” referansında yer almakta. Ara yüzü sınıfımıza iplement ettikten sonra otomatik olarak Studio; IEnumerator tipinde “GetEnumerator” metodunu oluşturmakta.

Foreach yapısı,bizden dizimizin ilerleyip diğer elemanlara ulaşmamız içinIEnumerable’dan IEnumerator sınıfından türemiş bir sınıf istemekte. Ben bunun için “Gezici” adlı bir sınıf yaratıp, IEnumerator ara yüzünü implement ettim.

İmplement ettikten sonra, Visual Studio otomatik olarak 3 tane metot oluşturdu. Bunlar MoveNext, Current ve Reset metotları.

3 metodu yukarıdaki gibi değiştirdikten sonra, Form_Load eventinde aşağıdaki kodları uyguluyoruz:

Uygulamayı çalıştırdığımızda;

Görüldüğü gibi uygulamamızda hata almadık, Sınıfımızı IEnumerable sınıfından türettik ve IEnumerator sınıfı ile de döngümüz de ilerleyip verileri gösterdik.

Umarım faydalı bir yazı olmuştur.

8 yorum:

Unknown dedi ki...

Bloğunuza IEnumerable ı araştırırken denk geldim, gayet güzel anlatmışsınız ve bilgi vermişsiniz. Bloğunuzdaki diğer yazılarınızıda okudum, bloğunuzla ilgilenmeyi ve yazı yazmayı bırakmışsınız anladığım kadarıyla. Kötü olmuş. Bence paylaşımlarınıza devam etmelisiniz.

Unknown dedi ki...

Eline emeğine sağlık teşekkürler.

F.S dedi ki...

Çok faydalı bir makale olmuş. Teşekkürler

talha dedi ki...

Teşekkürler İlaç Geldi

Fogita dedi ki...

Güzel bir yazı olmuş teşekkürler.

Unknown dedi ki...

çok iyi anlatım, teşeker ederim

Unknown dedi ki...

Eline Sağlık.

yunoshuthefuckup dedi ki...

Harika bir anlatım olmuş. Yazı yazmaya devam etmelisiniz. İyi çalışmalar.

Yorum Gönder

 
;