Sınıfların Başlangıç Metodları (Constructer)

Bir sınıf nesnesi new operatörüyle yaratılmak istendiğinde, new operatörü sınıf nesnesini heap’ta tahsis eder, sonra sınıfın ismine başlangıç metodu (constructer) denilen bir metodunu çağırır. Başlangıç metodu referans bildirimi sırasında değil, new operatörüyle sınıf nesnesinin yaratılması sırasında çağrılır. Sınıfın başlangıç metodu sınıf ismiyle aynı türdendir. Örneğin:


Başlangıç metodlarının geri dönüş değerinde bir kavramları yoktur. Geri dönüş değerleri yerine birşey yazılmaz, yazılırsa error oluşur. Başlangıç metodlarıda overload edilebilir. Yani sınıfın farklı parametrik yapılarına ilişkin birden fazla başlangıç metodu bulunabilir. Örneğin:

Hangi başlangıç metodunun çağrılacağı new operatöründe sınıf isminden sonra belirtilen argüman listesine bağlıdır. Örneğin:

Yani overload resolution işlemi yapılır ve en uygun metod seçilir. Sınıfın parametresiz başlangıç netoduna default başlangıç metodu denir. Eğer programcı sınıf için hiçbir başlangıç metodu yazmadıysa default başlangıç metodu derleyici tarafından içi boş olarak yazılır.

Başlangıç Metodları Neden Kullanılır?
Bir sınıf nesnesi yaratıldığında bazen birtakım ilk işlemlerinde yapılması gerekebilmektedir. Örneğin; bir dosya üzerinde işlem yapmadan önce dosyanın açılması gerekir. Seri port üzerinde işlem yapmadan önce seri portun set edilmesi gerekir. İşte bu tür birtakım ilk işlemler sınıfların başlangıç metodlarında gizlice yapılabilir. Aynı zamanda başlangıç metodları sınıfın veri elemanlarına birtakım ilk değerlerin atanmasında da kullanılabilir.

Başlangıç metodlarında return anahtar sözcüğü kullanılabilir fakat yanına bir ifade yazılamaz. Sınıfın başlangıç metodları yalnızca new operatörü yoluyla çağrılabilir. Programcı metodları normal bir metodmuş gibi çağıramaz.

Sınıflarda Erişim Kuralları

Sınıfın herhangi bir elemanı aşağıdaki erişim belirleyicilerinden herhangi birine sahip olabilir.
public
protected
private
internal
protected internal/internal protected
Default erişim belirleyicisi private biçimindedir. Yani hiç erişim belirleyicisi kullanmamakla, private belirleyicisini kullanmak aynı anlamdadır. Sonraki anlatımlarda sınıfın bütün public elemanlarının sınıfın public bölümünü oluşturduğu, bütün private elemanlarının sınıfın private bölümünü oluşturduğunu düşüneceğiz. Yani, sınıfın bütün protected bölümü demekle sınıfın bütün protected elemanları anlatılmaktadır.

Sınıfın erişim kuralları 2 maddeyle özetlenebilir.
1. Sınıfın dışından yalnızca o sınıfın public elemanlarına erişilebilir.
2. Sınıfın kendi içerisinden sınıfın tüm bölümlerine erişilebilir.

Sınıfın protected bölümü türetme olmadıktan sonra private bölümle aynı anlamdadır. Protected bölüm türetme konusunda ele alınacaktır.
internal belirleyicisi aynı assembly’den erişimlerde public, başka assembly’lerden erişimlerde private etkisi yaratır. Yani sınıfın internal bir elemanına biz aynı assembly’deki başka bir sınıftan erişebiliriz. Fakat başka bir assembly’deki sınıftan erişemeyiz.
protected internal bölüm ise aynı assembly içerisinde public etkisi yaratan farklı bir assembly’den erişimde protected etkisi yaratan bölümdür. Yani internal yerine private internal denilebilirdi.

Leave a Reply

Site Footer