Sınıflar
C# programlama dilinde sınıflar aşağıdaki gibi tanımlanır:
class Sinif
{
//Üyeler
}
Bir sınıfın üyeleri şunlar olabilir: alanlar, özellikler, metotlar, yapıcılar, yıkıcılar, olaylar. Bir sınıfın nesnesi şöyle oluşturulabilir:
Sinif s=new Sinif();
Nesneler sınıfların örneklenmiş halidir. Sınıfları birer fabrika olarak düşünürsek nesneler bu fabrikaların ürettiği ürünlerdir. Nesnelerin hangi özelliklere sahip olabileceği ve bu nesneler üzerinde koşturulabilecek eylemler sınıf tarafından belirlenir. Sınıftan üretilen her bir nesne bu özelliklere sahiptir, ancak bu özelliklerin değerlerinin ne olacağını nesne kendisi belirleyebilir. Bu özelliklerin değerlerine göre eylemlerin çalışma şekli değişebilir. Örneğin bir otomobil fabrikasından sadece otomobil üretilebilir. Ancak otomobilin cinsi, rengi, markası, motor gücü, lastik büyüklüğü, vb. değişebilir. Ayrıca bir otomobil üzerine tanımlanmış bir eylem (örneğin otomobilin hareket etmesi) otomobilin bu özelliklerine bağlı olarak çalışabilir. Örneğin otomobilin motorunun gücü düşükse otomobil daha yavaş hareket edebilir.
Az önceki örnekte aynı satırda hem nesne referansı oluşturulmuş hem de bu referansa bir nesne atanmıştı. İstenirse sadece nesne referansı oluşturulabilir:
Sinif s;
Ancak henüz bu nesne programımız içinde kullanılamaz. Bu nesneyi programımız içinde kullanabilmek için bu nesneye daha sonra bir değer atamalıyız:
s=new Sinif();
Bu örnekte s nesnesine sadece Sinif sınıfının varsayılan yapıcısının ürettiği değerin adresi atanmıştır. Ancak nesnelere atanabilecek şeyler bunlarla sınırlı değildir. Geriye o sınıf tipinden değer döndüren her türlü ifade o sınıfın nesnesine atanabilir. Örnek:
Sinif s1=new Sinif();
Sinif s2=s1;
Burada s1 nesnesine Sinif sınıfının yapıcısı kullanılarak bir adres atanmıştır. Daha sonra s1 nesnesinin adresi s2'ye atanmıştır.
Sınıflarda değer ataması değil, adres ataması yapılır. Çünkü sınıflar birer referans tipidir. Referans tiplerinde atamalar değerin kopyalanması yoluyla değil, adresin kopyalanması yoluyla olur. Örneğin yukarıdaki örnekteki ikinci satırda s2 nesnesine s1'in değeri değil, s1'in adresi atanmıştır. Bu noktadan sonra s1'deki değişiklikler s2'yi, s2'deki değişiklikler s1'i etkiler.
Değer ataması ile adres ataması bazen birbirleri ile aynı anlama gelecek şekilde kullanılabilir. Özellikle adres atamasının yapıldığı bir yerde "değeri atandı" gibi bir ifade kullanılabilir. Ancak buna rağmen atanan nesne bir referans tipi nesnesiyse atamanın adres ataması; eğer atanan nesne bir değer tipi nesnesiyse atamanın değer ataması olduğu unutulmamalıdır.