İsim Arama İşlemleri

İsim (name) dil içerisindeki herhangi bir syntax yapısının ismini ifade eder. Yani isim bir isim alanı ismi olabilir, sınıf ismi olabilir, değişken ismi olabilir ya da henüz görmediğimiz başka bir öğenin ismi olabilir. Bir isimle karşılaşan derleyici kesinlikle onun bildirimini bulmaya çalışır. Bunun için çeşitli faaliyet alanlarına sırasıyla bakılmaktadır. İsim bulunursa isim araması başarıyla sonuçlandırılır, bulunamazsa error oluşur.
İsim araması niteliksiz (unqualified) ya da nitelikli (qualified) biçiminde yapılabilir. Nokta operatörü kullanılmadan doğrudan yazılmış isimler niteliksiz arama kurallarıyla, nokta operatörünün sağındaki isimler nitelikli arama kurallarıyla aranır.
C#’ta karşılaşılan her isim aranır. Fakat bildirilen isim aranmaz. Örneğin: Sample s;
Burada derleyici 2 isimle karşılaşır. “s” bildirilen isimdir, bu yüzden onu aramaz. Yani zaten bu “s” ismi henüz yeni yaşama sokulmaktadır. Fakat “sample” ismi aranır. Örneğin:
int a = 10(a aranmaz), b = a;(b aranmaz,a aranır)

Başka bir deyişle bildirilen isim değil kullanılan isim aranmaktadır.

Niteliksiz Arama Kuralları

1. İsim, bir metodun içerisinde kullanılmışsa, kullanım yerinden yukarıya doğru metodun yerel bloklarında aranır.
2. İsim kullanıldığı metodun içinde bulunduğu sınıf bildiriminin heryerinde aranır.

Not: Bu durumda örneğin bir yerel değişkenle aynı isimli bir sınıfın bir veri elemanı bulunabilir. Böylece metod içerisinde bu isim kullanıldığında yerel değişkende erişilir.

3. İsim, kullanıldığı sınıfın içinde bulunduğu isim alanının heryerinde aranır.
4. İsim, kullanıldığı sınıfın içinde bulunduğu isim alanını kapsayan isim alanlarının her birinde içerden dışarıya doğru aranır.
5. Nihayet isim global isim alanının heryerinde aranır.

Nitelikli Arama Kuralları

Nokta operatörünün sağındaki isimler nitelikli isim arama kuralına göre aranır. Halbuki nokta operatörünün en solundaki isimler niteliksiz isim arma kuralına göre aranırlar. Örneğin; X.Y.Z gibi bir ifade de X ismi niteliksiz, Y ismi nitelikli ve Z ismi de nitelikli aranır. Nokta operatörünün sol tarafındaki operant bir isim alnı ismi, bir sınıf ismi ya da referans belirten bir isim olabilir.
1. Nokta operatörünün sağındaki isimler, eğer solundaki isim bir isim alanı ismi ise o isim alanının her yerinde aranır. Fakat kapsayan isim alanlarına bakılmaz.
2. Nokta operatörünün solunda bir sınıf ismi varsa, sağındaki isim o sınıf bildiriminin her yerinde aranır, başka bir yerde aranmaz.
3. Nokta operatörünün solunda bir referans varsa, sağındaki isim o referansın ilişkin olduğu sınıf bildiriminin her yerinde aranır.

using Direktifi

using direktifi, çakışmayan isimlerin niteliksiz olarak kullanılmasını sağlamak için düşünülmüştür. using direktifinin genel biçimi şöyledir:
using ;
using direktifi noktalı biçimde de kullanılabilir. Örneğin:
using A;
using X.Y;
using direktifi, isim alanlarının başına yerleştirilebilir. Başka bir yere yerleştirilemez. Örneğin:

İsim alanlarının başı demekle, onların ilk elemanı olacak biçimde yazım anlatılmak istenmektedir. uisng direktifi global isim alanına da yerleştirilebilir. Global isim alanının başı programın tepesidir.
using direktifinde 2 isim alanı söz konusudur:
1. Direktifin yerleştirildiği isim alanı
2. Direktifte belirtilen isim alanı

using direktifinin etkisi şöyledir: Niteliksiz isim arama sırasında isim using direktifinin yerleştirildiği isim alanına kadar ve o isim alanında bulunamamışsa direktifte belirtilen isim alanına da bakılır. using direktifi geçici değildir. Yani direktifle belirtilen isim alanına bakılırken oradaki using direktiflerinin bir etkisi yoktur. Eğer isim direktifin yerleştirildiği isim alanına kadar ve direktiğifin yerleştirildiği isim alanında bulunamazsa direktif etkili olur. Aksi halde direktifin etkisi yoktur.

using direktifi ile direktifte belirtilen isim alanında arama yapılırken oradaki isim alanı isimleri görülmez. Örneğin:

Bu durumda ya ismi tam nitelikli olarak belirtiriz ya da iç isim alanına ayrı bir using direktifi uygularız. Örneğin:

Şüphesiz using direktifinde belirtilen isim alanlarıda isim aramasına sokulmaktadır. Örneğin: using A.B;
Burada A niteliksiz olarak aranıp bulunacaktır. B’de, A’nın içerisinde aranıp bulunacaktır. Yani olmayan bir isim alanına using direktifi kullanırsak error oluşur.
İsim, birden fazla using direktifiyle belirtilen isim alanında bulunursa error oluşur. Örneğin; sample sınıfı hem A isim alanında hem de B isim alanında bildirilmiş olsun.

Bu durumda isim nitelikli olarak belirtilebilir. Örneğin:

Nitelikli arama sırasında using direktifinin bir etkisi yoktur. Örneğin

Şimdi biz şöyle bildirim yapmak isteyelim. Burada Sample ismi A’da aranacaktır ve başka bir isim alanına da bakılmayacaktır.
Pek çok C# programcısı System isim alanına ve daha bir çok isim alanına using direktifi uygulamaktadır. Böylece ordaki isimleri hiç niteliklendirme yapmadan kullanabilir.

using alias Direktifi

Bu direktif de isim alanlarının başına yerleştirilir ve yukarıda açıklanan using direktifi ile karışık kullanılabilir. Şu şekilde kullanılır:
using = ;
Örneğin: using X = A.B.C;
Burada A.B.C yerine X kullanılabilir. Yani using alias direktifi bir isim alanı ya da tür ismi için bir takma ad oluşturmaktadır.

Not: Standartlarda daha önceden görülen using direktifine “using namespace direktifi” denilmektedir. using namespace direktifi ile using alias direktifi tamamen farklıdır.

using alias direktifi ile bir sınıf ismini başka bir isimle niteliyebiliriz. Örneğin:
using S = A.B.Sample;
Burada S ile A.B.Sample tamamen aynı anlamdadır. using alias direktifi de adeta bildirilmiş bir isim gibi isim alanına yerleştirilmektedir. Dolayısıyla isim arama sırasında devreye girer. Yani biz bu ismi başka bir isim alanında kullanamayız.

Leave a Reply

Site Footer