Yazılım Mimarileri ve Tasarım Desenleri Üzerine

C# – Custom Collection Initializers Yapılarında Add Metodunu Extension Metod Yapısıyla Yönlendirme

Merhaba,

Bir önceki kaleme almış olduğum C# – Custom Collection Initializers(Özel Koleksiyon İlklendiricileri) başlıklı makalemde Custom Collection Initializers yapılarının nasıl oluşturulduğuna değinmiştim. Bu içeriğimizde ise ilgili makalede bahsetmiş olduğum ilklendiricinin tetiklediği “Add” metodununun işlevini başka bir metoda vererek, compiler’ın beklediği “Add” metodunu oluşturacağımız ekstra bir Extension metod ile bu [başka] metoda nasıl yönlendireceğimizi inceleyeceğiz.

Şimdi aşağıda oluşturmuş olduğum özel koleksiyon yapısını ele alalım.

    struct Personel
    {
        public int Id { get; set; }
        public string Adi { get; set; }
        public string SoyAdi { get; set; }
    }

    class Personeller : IEnumerable<Personel>
    {
        readonly List<Personel> PersonelListesi = new List<Personel>();
        public IEnumerator<Personel> GetEnumerator() => PersonelListesi.GetEnumerator();
        IEnumerator IEnumerable.GetEnumerator() => PersonelListesi.GetEnumerator();
    }

Bu koleksiyona ilklendirici ile veri eklemek istiyorsak eğer aşağıda görüldüğü üzere içerisinde “Add” isminde bir metodun bulunması gerekmektedir.

Peki, ilklendiricinin tetikleyeceği metodun “Add” dışında başka bir isimde olmasını istiyorsak? aşağıdaki ekran görüntüsünü inceleyiniz.

Gördüğünüz gibi compiler ille de “Add” isimli metotda ısrar ediyor, nuh diyor, peygamber demiyor…

İşte bu tarz durumda bizde “Add” isimli metot yerine kendi belirlediğimiz bir isimde ısrar ediyorsak eğer aşağıdaki gibi bir Extension metot ihtiyacımızı görecektir.

Yazmış olduğumuz “Add” isimli Extension metod “Personeller” sınıfına yani oluşturduğumuz özel koleksiyona ait bir genişletme metodudur. Haliyle bu Extension metod sayesinde, koleksiyon içerisine veri ekleme sorumluluğunu farklı bir isimdeki(Ekle) metoda yüklemiş oluyoruz. Bu da bize kendi sınıfımızda daha özgür ve öznel bir inşa imkanı tanıyor…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Exit mobile version