Serdar YILMAZ
Bizimkisi Bir “Bug” Hikayesi...
Serdivan/Sakarya

Etiket 'C# Sınıf Oluşturma'

C# – Sınıflar

dotnet

Sınıflar nesne yönelimli programlamanın en önemli ögesidir. C# %100 nesne yönelimli bir dil olduğu için tüm metot ve özellikler sınıflar içerisinde yer alır. Sınıfları veri yapısı veya veri yapısı modeli olarak tanımlayabiliriz.

Sınıflara Niçin İhtiyaç Duyarız ?

Metotları anlatırken; “Bütün işlemleri tek bir metot içerisinde yapmak yerine alt programlara yani metotlara ayırmak; kod tekrarını azaltır, okunabilirliği arttırır ve programın daha kolay geliştirilebilmesini sağlar. ” demiştik. (Bkz: C# – Metotlar)

Aynı şekilde; program geliştirirken bütün metotları tek bir sınıfın içinde tanımlamak yerine benzer görevleri yerine getiren metotları bir sınıf içerisinde tanımlamak kod tekrarını azaltır, okunabilirliği arttırır ve programın daha kolay geliştirilebilmesini sağlar. Örneğin veritabanı işlemlerini (ekleme, silme, güncelleme, arama…) yapan metotları diğer metotlardan ayırıp farklı bir sınıf içerisinde tanımlamak daha doğru bir yaklaşım olacaktır.

Sınıf Bildirimi ve Üye Elemanlar

Sınıfların üye elemanları özellikler ve metotlardır. Bir sınıf içerisinde çok sayıda özellik ve metot tanımlayabiliriz.

Sınıf ve sınıf üyelerinin bildirimi yukarıdaki şablona uygun bir şekilde yapılmalıdır.

Erişim Belirleyicisi: Metot ve özelliklere olan erişimin sınırlarını belirtmektedir.

  1. Private: Sadece tanımlandığı sınıf içerisinden erişilebilir.
  2. Public: Her yerden erişilebilir.
  3. Internal: Sadece bulunduğu projede erişilebilir.
  4. Protected: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan erişilebilir.

Sınıf Türünden Nesneler Oluşturma

Şimdi, edinmiş olduğumuz bilgileri kullanarak konuya ilişkin bir örnek yapalım ve bu örnek üzerinden sınıfları incelemeye devam edelim.

Ogrenci isminde bir sınıf oluşturduk ve içerisindeki üye elemanları public (Her yerden erişilebilir) olarak bildirdik.

Program sınıfı içerisindeki Main metodunda; “new Ogrenci()” ifadesi ile Ogrenci sınıfından bir nesne oluşturduk. Belleğin heap bölgesinde oluşturulan bu nesneye erişebilmek için adresini, ogr1 adını verdiğimiz referans değişkenine aktardık.

Nesneler belleğin heap bölgesinde, nesnelerin adreslerini tutan referans değişkenleri de stack bölgesinde tutulur.

ogr1 referansı ile nesnenin public üyelerine erişip değerler atadık. Daha son Bilgi() metodunu çağırarak atamış olduğumuz değerleri görüntüledik.

Bir nesne oluşturduğumuz an nesne içindeki üye elemanlara varsayılan değerler atanır. Numarik ise “0”, bool türünde ise “false”, string gibi referans tipliyse “null” değeri atanır.

Programımızın sonraki satırlarında “new Ogrenci()” ifadesi ile yeni bir nesne daha oluşturduk ve adresini ogr2 referans değişkenine aktardık. Benzer şekilde; üye elemanlarına değerler atayıp, Bilgi() metodu ile atamış olduğumuz değerleri görüntüledik.

Ekran Çıktısı: 

Son olarak Sınıflar için kilit nokta sayılabilecek bir kaç hususa değineceğiz.

Örnek programımızda iki adet nesne oluşturduk ve ilkinin adresini ogr1 değişkenine, ikincisinin adresini ogr2 değişkenine atadık. Her iki nesneyi de Ogrenci sınıfından oluşturmamıza rağmen nesneler birbirinden tamamen bağımsızdır. Çünkü içeriğin başında da belirttiğimiz gibi Sınıflar sadece birer veri modelidir. Bir sınıfı model alan çok sayıda nesne oluşturabiliriz ve bu nesneleri birbirinden bağımsız olarak kullanabiliriz.

Bir sınıftan oluşturulan nesnelerin heap bölgesinde, nesnelerin adreslerini tutan referans değişkenlerinin de stack bölgesinde tutulduğunu söylemiştik. Eğer bir sınıftan herhangi bir nesne oluşturulmazsa o sınıf bellekte her hangi bir yer kaplamaz. Özetle sınıf bildirimleri için bellekte yer tahsis edilmez.

Bir sonraki içeriğimiz de yapıcı metotlara, static üyelere ve property‘lere değinerek sınıf tasarımımızı iyileştireceğiz.

Serdar YILMAZ