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

C# – Partial Method Yapıları

Merhaba,

Biliyorsunuz ki C#’ta, “partial” keywordü aracılığıyla class yapılarında “partial class” üretebilmekteyiz. Yani bir sınıfın farklı lokasyondaki parçasını oluşturabilmekteyiz. “partial” keywordünün bu işlevinin dışında benim daha yeni öğrenmiş olduğum ve çoğu kaynakta da timsali zor bulunan bir durumdan bahsedeceğim sizlere. “Partial Method” yapılarından…

“partial” keywordü kullanılabildiği yapılarda parçaları birleştirme işlevi güden ve farklı dosyaların bir bütün olarak çalışabilmesini sağlayan bir modifier(nitelendirici)dir. Haliyle bu keywordü classlar üzerinde kullanırsak class parçalarını birleştirecektir. Yok eğer metotlar üzerinde kullanırsakta metot parçasını bütünsel olarak görecektir.

Şimdi gelin “Partial Method”ları inceleyelim. Tabi her yapıda olduğu gibi partial ve method kavramları bir araya geldiği vakitte belli başlı kurallar meydana gelmektedir. Doğal olarak gelin bu kurallar çerçevesinde konuyu ele alalım.

Yukarıdaki maddelerden birinde bahsetmiş olduğum tanım ve gövde ikilisinde aslında tanımdan kastım declaration(beyanname), gövdeden ise implementation(uygulama)dır.

Partial metotlarda asıl maksat, bir metotun declaration’ının bir dosyada, implementation’ının başka bir dosyada durmasını sağlamaktır. Bu açıdan bakınca partial metodları, partial classlarda kullanmak daha elverişlidir.

    partial class OrnekSinif
    {
        //Declaration
        partial void X(ref int x);
    }

    partial class OrnekSinif
    {
        //Implementation
        partial void X(ref int x)
        {

        }
    }

Eğer ki declaration bir partial metodun implementation’ını oluşturmazsanız hata almazsınız. Bu demek oluyor ki, uygulanmamış bir partial metot derleme sırasında yok sayılmaktadır. İşte bu yüzden yukarıda son madde olarak belirttiğim gibi delegate yapılarınca ilgili metot temsil edilmemektedir.

Bu duruma örnek olarak aşağıdaki kod yapısını incelerseniz eğer;

    partial class OrnekSinif
    {
        partial void X();
    }

    partial class OrnekSinif
    {
        public void Y()
        {
            X();
        }
        partial void X()
        {
            MessageBox.Show("Test");
        }
    }

X metodu partial olduğu için doğal olarak private erişim belirleyicisine sahiptir. Haliyle X metodunu nesne üzerinden kullanabilmek için public olan Y metodu oluşturulmuştur. Burada Y içerisinde X metodu çağırıldığı için Compiler tarafından X metodu private olarak görülecek, sayılacaktır. Yok eğer Y metodu içerisinden X metodunun çağırma ifadesini silersek eğer Compiler derleme aşamasında X diye bir metod görmeyecektir.

Evet…

Bu pek fazla bilinmeyen amma nedense kullanılışı benim çok hoşuma giden konuyu aydınlatmış olduğuma inanıyor ve şimdilik hoşçakalın diyorum…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Exit mobile version