Kısmi Sınıf (Partial Class)

Eyl 06, 2013

Kısmi Sınıf (Partial Class) C# 2.0 ve Visual Studio 2005 ile gelen yeni bir özelliktir. Ayrıca .NET Framework 2.0 tarafından da desteklenir. Kısmi sınıf basitçe ifade edilecek olursa, tek bir fiziksel dosyada tutulan sınıfların parça parça farklı fiziksel dosyalarda tutulmasına imkân sağlayan bir yapıdır. Kısmi (partial) özelliği sınıf (class) için kullanılabildiği gibi, yapı (struct) ya da arayüz (interface) için de kullanılabilmektedir.

Kısmi sınıflar derleyici için normal bir sınıftan farklı değildir; çünkü oluşturulan bütün kısmi sınıflar derleyici için tek bir sınıf gibi görünür. Kısmi sınıflar birleştirildikten sonra derlendiği için farklı yazılım dillerinde oluşturulup daha sonra birleştirilemezler. Ayrıca oluşturulan kısmi sınıflar parça parça farklı derleyicilerle de derlenemez. Hepsi tek bir derleyici ile derlenmelidir.

Kısmi sınıf, Visual Studio tarafından, özellikle web sayfalarının temel konsepti olan arka plan kodlarının (code behind) bulunduğu dosyalarda oldukça fazla kullanılmaktadır.

Avantajları:

  • Büyük yazılım projelerinde kısmi sınıf büyük önem kazanır; çünkü tek bir sınıf üzerinde birden fazla yazılımcı aynı anda çalışma imkanı bulur. 
  • Bir fiziksel dosyada bulunan kısmi sınıf kodları veritabanından üretilmiş kodlar olabilir ve başka bir fiziksel dosya oluşturup aynı sınıf için SQL sorguları yapılabilmektedir.
  • Otomatik olarak üretilen kaynak ile çalışırken; kodlar, kaynak dosyası tekrar oluşturulmadan sınıfa eklenebilir. Visual Studio Windows formları , Web hizmeti sarıcı kodu ve bunun gibi yerlerde bu yaklaşımı kullanır. Visual Studio tarafından oluşturulan dosyayı değiştirmeden bu sınıfları kullanabilen kodlar yaratılabilmektedir.

Kullanırken dikkat edilmesi gerekenler:

  • Bütün kısmi tanımlamalarda, anahtar kelime "partial" bulunmalıdır.
  • Bütün kısmi çeşitleri aynı modül ve derleyici içinde aynı türler için tanımlanmalıdır.
  • Herhangi bir kısmı mühürlenirse, bütün sınıf mühürlenir.
  • Herhangi bir kısmı soyutlanırsa, bütün sınıf soyutlanır.
  • Bütün kısmi örnekleri aynı erişilebilirlikte olmalıdır.
  • Herhangi bir kısmi türündeki kalıtım bütün sınıfa uygulanır.

Uygulama:

Aşağıdaki ilk kodlar otomatik olarak oluşturulan kodlara bir örnektir. Microsoft'un Entity Framework özelliği kullanılarak veritabanından bir model oluşturulmuştur. Model oluşuturulurken tablolara ait kısmi sınıflar oluşturulmaktadır. Örnekte "Ogrenci" tablosu kısmi sınıf olarak Entity Framework özelliği kullanılarak oluşturulmuştur.

public partial class Ogrenci : EntityObject
    {
        public static Ogrenci CreateOgrenci(global::System.Guid id, global::System.String ad, 
                                                            global::System.String soyad, 
                                                            global::System.Boolean silindi)
        {
            Ogrenci ogrenci = new Ogrenci();
            ogrenci.Id = id;
            ogrenci.Ad = ad;
            ogrenci.Soyad = soyad;
            ogrenci.silindi = silindi;
            return ogrenci;
        }
}

Aşağıdaki kodlar ise aynı kısmi sınıf için el ile oluşturulmuş method kodlarıdır.Bu şekilde 2 farklı fiziksel dosyada tutulan kısmi sınıflar bir arada kullanılabilmektedir.

namespace ProjeModel
{
    public partial class Ogrenci
    {
        public OgrenciGuncelle(string ad, string soyad, string bolum, string fakulte)
        {
            this.Ad = ad;
            this.Soyad = soyad;
            this.Bolum = bolum;
            this.Fakulte = fakulte;
        }
    }
}