Friday, September 21, 2012

This anahtar sözcüğü (C#)


This Anahtar Sözcüğü

Nesneler üzerinden metotlar çağrılırken aslında biz farkına varmadan metotlara gizlice ilgili nesnelerin referansları geçirilir.
Örneğin, this anahtar sözcüğünün anlamını daha iyi kavrayabilmek için soyutlama yapalım;

Dorgen d1= new Dortgen();

d1.EnBoyBelirle();

yerine aşağıdaki gibi bir kullanımda olabilirdi:

Dortgen d1 = new Dortgen();


d1.EnBoyBelirle(d1 'in referansı);

Eğer this anahtar sözcüğü olmasaydı ikinci şekildeki gibi bir kullanıma mecbur kalacaktık. İkinci şekildeki gibi bir kullanımın
kullanışsız olduğunu söyleyebiliriz. Bu yüzden C# dilini tasarlayanlar d1 nesnesinin referansını gizlice EnBoyBelirle()
metoduna aktarmada kullanılacak bir sistem geliştirmişlerdir. İşte this anahtar sözcüğü bu referansı temsil etmektedir.
this anahtar sözcüğü çok fazla kullanılmasa da bazı durumlarda faydalı olabilir; örneğin,
EnBoyBelirle() metodunun aşağıdaki gibi olduğunu düşünelim:

puplic void EnBoyBelirle(int En, int Boy)
{
     if(En < 0 || Boy < 0)
     {
           En= 0;
           Boy = 0;
     }
     else
     {
           En = En;
           Boy = Boy;
     }
}



EnBoyBelirle() metodunun parametreleri olan En ve Boy değişkenleri Dortgen sınıfının üye elemanları ile aynı isime sahiptir.
Metot gövdesinde kullandığımız En ve Boy değişkenleri EnBoyBelirle() metodunun parametleridir. Çünkü bir üst faaliyet
alanında olan Dortgen sınıfının En ve Boy değişkenleri EnBoyBelirle() metodunun parametleri tarafından görünmez hale gelmiştir.

Böyle bir durumda this anahtar sözcüğünü kullanarak mantıksal hatayı önlemiş oluruz.

puplic void EnBoyBelirle(int En, int Boy)
{
     if(En < 0 || Boy < 0)
     {
           this.En= 0;
           this.Boy = 0;
     }
     else
     {
           this.En = En;
           this.Boy = Boy;
     }
}


derleyecek olursak;

using System;


namespace ThisSoz
{
    class dortgen
    {
        public int En;
        public int Boy;

        public int Alan()
        {
            int Alan = En * Boy;
            return Alan;
        }
         public void EnBoyBelirle(int En, int Boy)
        {
            if (En < 0 || Boy < 0)
            {
                this.En = 0;
                this.Boy = 0;
            }
            else
            {
                this.En = En;
                this.Boy = Boy;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            dortgen d1 = new dortgen();
            d1.EnBoyBelirle(2,-5);
            Console.WriteLine("En: " +d1.En +"  "+ "Boy: " +d1.Boy);
            Console.ReadLine();
        }
    }
}
ekran çıktısı olarak En: 0 Boy: 0 sonucunu alacağız.



this anahtar sözcüğü ile EnBoyBelirle() metodunun En ve Boy parametleri, o an üzerinde çalışılan Dortgen nesnesinin En ve Boy özelliklirine atanıyor. this anahtar sözcüğünün kullanımına olanak tanımamak okunabilirlik açısından önemlidir.


2 comments:

  1. if içersindeki en ve boy değişkenleri En ve Boy şeklinde olmalıdır.

    ReplyDelete