Nesne yönelimli programlamanın (OOP) en temel yapı taşlarından biride
kalıtımdır(inheritance). .NET mimarisinde her yerde olduğu gibi ASP.NET
web uygulamalarında da gerek sayfa tiplerinde gerekse kontrollerde
kalıtımın getirilerini ve etkilerini önemli derecede görüyoruz. Fakat
eğitimlerimde ve kendi çevremde gördüğüm kadarıyla kalıtımın web
sayfalarında en güzel uygulanabileceği noktalardan birisini kaçırıyoruz.
Şöyle
bir senaryo üzerinden anlatmaya çalışacak olursam; bir projede
kullandığımız birçok sayfanın ortak işlevleri olsun. Mesela bu
sayfaların tamamında online kullanıcı sayısını görüntülemek
isteyebiliriz. Yine sayfanın title bilgisini veritabanından dinamik
olarak çekip görüntülemek isteyebiliriz. Normal şartlarda aklımıza
gelen ilk yol tüm sayfaların code-behind kısmında bu işlemleri
metot-property olarak tek tek yazmak olabilir. Yine bu işleri yapan bir
class yazarak her sayfada class'ın nesne örneğini elde ederek bu işlemi
instance üzerinden yürütmekte akla gelen bir diğer yol olabilir. Fakat
benim bahsetmek istediğim yol bu iki yoldan da daha kolay ve pratik
olacaktır.
Bildiğimiz gibi aspx uzantılı sayfalarımız System.Web.UI.Page
sınıfından kalıtılarak elde edilir. Eğer kendimiz için bir sayfa
prototipi çıkarır ve bunu System.Web.UI.Page sınıfından kalıtılan BasePage
isminde bir class olarak oluşturursak, artık Default.aspx gibi bir
sayfanın class'ını System.Web.UI.Page yerine BasePage gibi bir
class'tan kalıtacak olursak istediğimiz işlemi gerçekleştirmiş
olacağız. Anlaşılmadı mı? O zaman örnek kodlara bakalım. Basit ama fikir vermesi açısından yeterli bir örnek;
BasePage.cs
public class BasePage : System.Web.UI.Page
{
public int OnlineKullaniciSayisi
{
get
{
// Online kullanıcı sayısını bul ve return ile döndür
}
}
public BasePage()
{
// Tüm sayfalar ilk çalıştırıldığında yapılması istenilen değişiklikler
// constructor'da yapılabilir. Örneğin; sayfanın adını çözümle,
// veritabanına git ve sayfanın ziyaret edilme sayısını 1 arttır…
this.Title = "Dinamik oluşan başlık bilgisi…";
}
}
Default.aspx
public partial class Default : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Sitedeki online kullanıcı: " +
this.OnlineKullaniciSayisi.ToString());
}
}
Böylece
artık tüm sayfaları BasePage isimli class'tan kalıtarak sayfalar ile
ilgili temel ve ortak işlemleri daha kolay yönetebilir hale
getirebilirsiniz.