String Sınıfı

system isim alanı içerisindeki String sınıfı, yazılar üzerinde işlem yapan genel bir sınıftır. Bu sınıf çok kullanıldığı için string anahtar sözcüğüyle de karşılanmıştır. Yani string demekle system.string demek tamamen aynı anlamlıdır. String bir sınıf olduğuna göre biz String sınıfı türünden bir değişken bildirdiğimizde aslında bir referans bildirmiş oluruz. string nesnesinin içerisinde hem yazının karakterleri hem de yazının uzunluğu tutulmaktadır.

String nesnesinin yaratılması new operatörüyle yapılabileceği gibi iki tırnak ifadesiylede yapılabilir. Biz C#’ta ne zaman iki tırnak içerisinde bir yazı yazsak, derleyici new operatörünü kullanarak bir string nesnesi yaratır ve iki tırnak içerisindeki yazıyı bu nesnenin içerisine yerleştirir. İki tırnak ifadesinden ürün olarak, yaratılan string nesnesinin adresi elde edilmektedir. Yani iki tırnak ifadeleri string türünden bir referans belirtir.
Konsol sınıfının Write ve WriteLine metodlarına string türünden referans verilirse bu metodlar string nesnesinin içerisindeki yazıyı ekrana yazdırmaktadır.

String sınıfının lengt isimli property elemanı, yazının karakter uzunluğunu verir. length property’si readonly’dir. İçerisine birşey atanamaz. String sınıfının int türden parametreli bir indeksleyicisi vardır. Bir string referansı bu nedenle köşeli parantez operatmrüyle kullanılabilir. Yazının ilk karakteri sıfırıncı indeksteki karakterdir ve biz köşeli parantez ile yazının istediğimiz bir karakterini elde edebiliriz.

String nesnesi bir kez yaratıldıktan sonra bir daha içerisindeki karakterler değiştirilemez. Dolayısıyla sınıfın indeksleyiciside readonly’dir.

1. İlgili sınıfta aynı isimli tüm metodlar aday (candidate) metodlardır.
2. Çağrılma ifadesindeki her bir argümandan ona karşı gelen parametre değişkenine doğrudan atamanın söz konusu olduğu metodlara uygun (applicable) metodlar denir.
3. Bu aşamada artık uygun metodlar arasından en uygun (the most applicable) olan seçilir. En uygun metodun bulunması için öncelikle dönüştürmeler arasındaki kalite farkının belirlenmesi gerekir. T1, T2, T3 birer tür belirtmek üzere T1’den T2’ye de, T1’den T3’e de doğrudan dönüştürmenin olduğunu varsayalım.
• Eğer T1 -> T2 ve T1 -> T3 dönüştürmelerinde, T2’den T3’e doğrudan dönüştürme var fakat T3’den T2’ye yoksa T1 -> T2 dönüştürmesi daha iyidir. Örneğin; int -> long ve int -> double dönüştürmelerinde int -> long dönüştürmesi daha iyidir.
• T1 ->T2 ve T1 -> T3 dönüştürmelerinde T2 ->T3 ve T3 -> T2’de dönüştürme yoksa işarette türe dönüştürme daha iyidir. ÖRneğin; uint ->long ve uint -> ulong dönüştürmelerinde ne long’tan ulong’a ne de ulong’tan long’a dönüştürme vardır. Bu durumda uint -> long dönüştürmesi daha iyidir.

• T1 -> T2 ve T1 -> T3 dönüştürmelerinde T2 veya T3’ten biri T1 ile aynı ise o dönüştürme daha iyidiri. Yani özdeş dönüştürmeler her zaman en iyisidir. Örneğin; int -> int ve int -> long dönüştürmelerinde int -> int dönüştürmesi daha iyidir.

En uygun metod uygun metodlar arasında şöyle seçilir:
Her bir argüman parametre dönüştürmesinde diğerleriyle yarışa sokulduğunda, daha kaliteli bir dönüştürme sağlayan ya da daha kötü bir dönüştürme sağlamayan metod en uygun metoddur. Yani en uygun metod her bir argüman parametre dönüştürmesi dikkate alındığında ya daha iyi bir dönüştürme sağlayan ya da daha kötü bir dönüştürme sağlamayan (yani eşit iyilikte de olabilir, eşit kötülükte de olabilir) metoddur. İşte eğer böyle bir koşulu sağlayan tek bir metod varsa seçilir yoksa overload resolution işlemi başarısızlıkla sonuçlanır. Metodun şöyle çağrılmış olduğunu varsayalım.

Burada 1, 2, 3, 4, 5, 6 numaralı metodlar aday. Fakat 1, 2 ,3, 4, 5 uygun metodlardır. Bunlar yarışa sokulur. Burada 1 numaraları metod en uygun metod olarak seçilir.

Burada 3, 4, ,5 numaralı metodlar en uygun metodlardır. Burada her argüman parametre dönüştürmesi diğerlerinden daha iyi olan ya da daha kötü olmayan bir metod yoktur. Overload resolution işlemi başarısız olur ve error oluşur. Daha belirgin olarak aşağıdaki örnek verilebilir.

Burada 1. metodun 1. dönüştürmesi, 2. metodunda 2. dönüştürmesi daha iyidir. Dolayısıyla en uygun metod yoktur.
Bu kurallardan çıkan bir sonuçta şudur: Eğer biz belirli bir metodu tamamen aynı türden argümanlarla çağırırsak, kesinlikle en uygun metod olarak o seçilecektir.

İsim Alanları
Bir isim alanı bildiriminin genel biçimi şöyledir:

Aynı isim alanı içerisinde aynı isimli birden fazla sınıf bulunamaz. Fakat farklı isim alanlarının içerisinde bulunabilir.
İsim alanları, isim çakışmasını engellemek için düşünülmüştür. Eğer isim alanları olmasaydı farklı şirketler tesadüfen yazdıkları sınıflara aynı isimleri verebilirlerdi ve biz o sınıfların kütüphanelerini bir arada kullanamazdık

Burada C isim alanları birleştirilmez. Çünkü farklı isim alanlarının içerisindeki aynı isimli isim alanları aslında farklı isim alanı belirtir. ,
İç bir isim alanı noktalı bir biçimde tek hamlede bildirilebilir:

Burada A isim alanının içerisindeki B isim alanı bildirilmektedir.

.Net’in bütün sınıfları system isim alanı içerisinde ya da system isim alanı içerisindeki başka isim alanları içerisinde bulunmaktadır. Programcının system isim alanı içerisine ek yapması yasaklanmamıştır fakat tavsiye edilmez.

Leave a Reply

Site Footer