this Referansı

Aslında static olmayan metod kavramı aşağı seviyeli bakıldığında uydurma bir kavramdır. Aslında bütün metodlar static metodlar gibidir. Programcı isterse sınıfın tüm metodlarını static yapabilir. Yani static olmayan bir metodun eşdeğer static bir karşılığı yazılabilir.

Burada set ve get metodlarını eşdeğer etkiyi yaratcak biçimde static olarak yazabiliriz.

Her static olmayan bir metodun eşdeğer bir static metodu yazılabilir. Bunun için ekstra bir parametre gerekmektedir.
İşte aslında derleyicide static olmayan metodları sanki static bir metodmuş gibi derleyerek onlara gizlice metodun çağrıldığı referansı parametre olarak geçirmektedir. Yani 2 parametreli static olmayan bir metod aslında 3 parametreli static bi metod gibidir. Static olmayan sıfır parametreli metodda 1 parametreli static metod gibidir. Static olmayan metodların içerisinde sınıfın veri elemanlarını kullandığımızda aslında derleyici bu veri elemanlarına doğrudan değil gizlice geçirilen parametre yoluyla erişir.
İşte static olmayan metodlara geçirilen bu gizli referans parametresi, metodların içerisinde “this” anahtar sözcüğüyle kullanılabilir. Bu gizlice parametreyi programcı parametre listesinde belirtemez. Derleyici zaten bunu gizlice geçirmektedir. Fakat programcı açıkça this anahtar söcüğüyle bu parametreyi kullanabilir. Yani this referansı metodun çağrılmasında kullanılan referansı temsil eder.
Bir sınıfın a isimli bir veri elemanı olsun. Biz de o sınıfın static olmayan bir metodunda o ismi kullanmak isteyelim. Bu ismi doğrudan “a” biçiminde kullanmakla “this.a” biçiminde kullanmak arasında bir fark yoktur.

this referansı hangi sınıf içerisinde kullanılmışsa o türdendir. Ayrıca this readonly bir referanstır. Yani this referansına atama yapamayız.
Bazen this anahtar sözcüğünün bilinçli olarak kullanılması gerekebilir. Örneğin; sınıfın veri elemanıyla aynı isimli metod içerisinde bir parametre değişkeni ya da yerel değişken varsa, sınıfın veri elemanına erişmek için bilinçli olarak this anahtar söcüğünün kullanılması gerekir. Örneğin:

Bazı programcılar hiç isim çakışması olmasa bile sınıfın veri elemanlarına yine this referansıyla erişmektedir. (Örneğin Microsoft tüm örneklerinde böyle yapmaktadır.) Bundan amaç okunabilirliği arttırmaktır. Yani örneğin; biz metod içerisinde disp.a gibi bir ifade gördüğümüzde a’nın kesinlikle sınıfın veri elemanı olduğunu anlarız.
Sınıfın Foo isimli static olmayan metodu, Bar isimli static olmayan metodunu çağıracak olsun. Bu işlem “Bar( )” ilede, “this.Bar( )” ilede yapılabilir. Aralarında hiçbir farklılık yoktur. Yine programcıların bazıları bu tür çağırmaları this referansıyla yapmaktadır. İşte bunun nedeni metodun static olmadığını vurgulayarak okunabilirliği arttırmaktır.

Programcıların bir bölümü okunabilirliği artırmak için this kullanmak yerinesınıfın veri elemanlarını bazı öneklerle isimlendirmektedir. Bunun için d_ veya m_ önekleri kullanılmaktadır. Kursumuzda m_ öneki tercih edilecektirt. Sınıfın statik metotlarına ve property lerine this referansı geçirilomez. Zaten bu nedfenle statik property ler ve metotlar statik olmayan elemanları kullanamazlar.

Leave a Reply

Site Footer