Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  .Net Framework'te sakladığı değerlere tek tek erişilebilen dizi tarzı sınıfların implement etmesi gereken arayüz.

Açılımı şöyledir:
public interface IEnumerator
{
    public bool MoveNext();
    public void Reset();
    public object Current {get;}
}


MoveNext metodu bir sonraki değere konumlanmayı sağlar. Reset metodu ilk değere konumlanmayı sağlar. Current isimli property üzerine konumlanılan değeri döndürür.

Örnek verelim tam olsun: Sinif adinda bir class tanımlamak istiyoruz. Bunun içinde Ogrenci'ler saklanacak. foreach(Ogrenci ogr in sinif) şeklinde de kod yazabilmek istiyoruz. Şöyle yapmamız gerekir:

public class Ogrenci
{
    public string Ad;

    public Ogrenci(string ad)
    {
        this.Ad = ad;
    }
}

public class Sinif : IEnumerator, IEnumerable // dikkat! bu iki interface System.Collections içinde.
{
    private Ogrenci[] ogrenciler;
    private int position = -1;

    public Sinif()
    {
        ogrenciler = new Ogrenci[3];
        ogrenciler[0] = new Ogrenci("Ali");
        ogrenciler[1] = new Ogrenci("Veli");
        ogrenciler[2] = new Ogrenci("Osman");
    }

    public void Reset()  // IEnumerator'dan
    {
        position = -1;
    }

    public object Current  // IEnumerator'dan
    {
        get
        {
            return ogrenciler[position];
        }
    }

    public bool MoveNext()  // IEnumerator'dan
    {
        if(position<ogrenciler.Length-1)
        {
            position++;
            return true;
        }
        else
        {
            return false;
        }
    }

    public IEnumerator GetEnumerator()  // IEnumerable'dan
    {
        return (IEnumerator) this;
    }
}

class Deneme
{
    static void Main(string[] args)
    {
        Sinif sinif = new Sinif();

        foreach(Ogrenci ogr in sinif) // eğer Sınıf IEnumerable olmasaydı hata alırdık.
            Console.WriteLine(ogr.Ad);

        Console.ReadLine();
    }
}

fizikci
21 Kasım 2005 17:01
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1109 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen