this anahtar sözcüğü ilgili nesnenin referansını belirtmektedir. Konuyu daha anlaşılır kılmak için örnek uygulamalar üzerinden gideceğiz.
class Ogrenci { private string AdSoyad; private int Numara; private int Sinif; public Ogrenci(string AdSoyad, int Numara, int Sinif) { this.AdSoyad = AdSoyad; this.Numara = Numara; this.Sinif = Sinif; } }
Yukarıdaki veri modelinde sınıfın üye elemanları ile yapıcı metodun parametrelerinin aynı isimlere sahip olduğu görülmektedir. Peki yapıcı metot içerisinde AdSoyad değişkenine erişmek istediğimizde; sınıfın üye elemanı olan AdSoyad değişkenine mi erişiriz yoksa yapıcı metodun parametresi olan AdSoyad değişkenine mi ? İşte bu noktada this anahtar sözcüğü sorunun cevabını netleştirip, kaynak kodlarımızın okunabilirliğini arttırmaktadır.
this anahtar sözcüğü ile nitelenen değişkenler sınıfın üye elemanlarıdır. Yukarıdaki veri modelinde yapıcı metoda parametre olarak gönderilen değerler, sınıfın üye elemanlarına aktarılacaktır.
class Silindir { private double r; private double h; private double PI; public Silindir(double yaricap, double yukseklik, double piSayisi) { r = yaricap; h = yukseklik; PI = piSayisi; } public Silindir(double yaricap, double yukseklik) : this(yaricap, yukseklik, 3.1415) { } public double Hacim() { return (PI * r * r * h); } public double YuzeyAlani() { return (2 * PI * r * h); } } class Program { static void Main(string[] args) { // 3.Parametre girilmediği için PI 3.1415 değerini alacaktır. Silindir s1 = new Silindir(4, 6); Console.WriteLine("Silindirin Hacmi:{0} - Silindirin Yüzey Alanı:{1}", s1.Hacim(), s1.YuzeyAlani()); // 3.Parametreye girilen değer PI'ye atanacaktır. Silindir s2 = new Silindir(4, 6, 3); Console.WriteLine("Silindirin Hacmi:{0} - Silindirin Yüzey Alanı:{1}", s2.Hacim(), s2.YuzeyAlani()); } }
Yukarıdaki programımızı inceleyecek olursak; Silindir sınıfının iki adet yapıcı metodu bulunmaktadır. Silindir sınıfından nesne oluşturulurken 3 adet parametre girildiğinde; 1. parametre silindirin yarıçapını, 2. parametre yüksekliğini, 3. parametrede PI sayısının kaç alınacağını belirtecektir.
Eğer Silindir sınıfından nesne oluşturulurken 2 parametre girilirse; 1. parametre silindirin yarıçapını, 2. parametre yüksekliğini belirtecektir ve PI sayısı da “3.1415” olarak alınacaktır. Peki bunu nasıl yaptık ?
İçeriğimizin başında this anahtar sözcüğünün ilgili nesnenin referansını belirttiğini söylemiştik.
public Silindir(double yaricap, double yukseklik) : this(yaricap, yukseklik, 3.1415) { }
this anahtar sözcüğü ile; girilen 2 parametreyle beraber, PI girilmediği taktirde varsayılan olarak kabul edilmesini istediğimiz değerini, double tipinde 3 parametre alan yapıcı metoda gönderdik. Böylece 2 parametre alan yapıcı metodu, 3 parametre alan yapıcı metottan faydalanarak kullandık.
Yapıcı metotların aşırı yüklenmesini anlatırken yukarıdaki programı this anahtar sözcüğünü kullanmadan yazmıştık (Bkz:C# – Yapıcı Metotlar). Kaynak kodlarını karşılaştırıp aradaki farkı daha iyi anlayabilirsiniz.
Yukarıdaki program Opsiyonel(Optional) Parametreler kullanılarak tek bir yapıcı metot ile yazılabilir.
Serdar YILMAZ