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

Arşiv 'C# Döküman' Kategori

C# – Yapıcı Metotlar ve Kalıtım

dotnetTüretilmiş sınıftan bir nesne oluşturduğumuz da önce temel sınıfın yapıcı metodu sonra da türetilmiş sınıfın yapıcı metodu çalışacaktır.

A temel sınıf, B ise türetilmiş sınıftır. Bu yüzden B sınıfından bir nesne oluşturduğumuz da (B nesne=new B();) önce A sınıfının yapıcı metodu sonra da B sınıfının yapıcı metodu çalışacaktır.  Ekran çıktısı;

Her yapıcı metodun kendi tanımlandığı sınıfın üye elemanları ile ilgili iş yapması gerekir.

base Anahtar Sözcüğü

Türetilmiş sınıf içerisinden temel sınıfın elemanlarına erişmek için base anahtar sözcüğünü kullanırız.

A temel sınıf, B ise türetilmiş sınıftır. Temel sınıfın yapıcı metoduna türetilmiş sınıf üzerinden parametre gönderebilmek için base anahtar sözcüğünü kullanırız.

B sınıfından nesne oluştururken girdiğimiz birinci(10) ve ikinci(15) parametreler A sınıfının yapıcı metoduna gönderilecektir. Üçüncü(20) ve dördünce(25) parametreler ise B sınıfının yapıcı metodu içerisinde kullanılacaktır. Ekran çıktısı;

Türetme ile sınıflar arasında hiyerarşik bir yapı sağlanır.

base anahtar sözcüğü C sınıfında B sınıfını; B sınıfında da A sınıfını temsil eder. C sınıfından bir nesne oluşturduğumuz da önce A sınıfının yapıcı metodu, sonra B sınıfının yapıcı metodu en son da C sınıfının yapıcı metodu çalışacaktır.

C sınıfından nesne oluştururken girdiğimiz birinci(10) ve ikinci(15) parametreler B sınıfının yapıcı metoduna gönderilecektir. Üçüncü(20) parametre ise C sınıfının yapıcı metodu içerisinde kullanılacaktır. B sınıfına gönderilen birinci(10) ve ikinci(15) parametrelerden ilki(10) A sınıfının yapıcı metoduna gönderilecektir ve ikinci(15) parametre de B sınıfı içerisinde kullanılacaktır.

Serdar YILMAZ

C# – Kalıtım

dotnetKalıtım, nesneye dayalı programlamanın en önemli özelliklerinden biridir. Kalıtım yolu ile sınıflar birbirinden türetilebilir. Bir sınıf diğer bir sınıftan türediği zaman, türediği sınıfın bütün özelliklerini içerir. Bunun yanında kendine has özellikler de barındırabilir.

Yukarıdaki örnekte; A temel sınıf, B ise türetilmiş sınıftır. Türetme işlemi “class B : A” kodu ile 11. satırda yapılmıştır. B sınıfı A sınıfından türetildiği için A sınıfı içerisindeki değişken ve metodu kalıtım yolu ile almaktadır.

Türetme işleminden dolayı B sınıfı, A sınıfı içerisindeki “degisken_1” ve “Metot_1()” elemanlarını kendi içerisinde tanımlanmış gibi kullanabilmektedir.

Türetilmiş sınıf, temel sınıf içerisindeki değişkenleri ve metotları kendi içerisinde tanımlanmış gibi kullanabilir. Ancak temel sınıf, türetilmiş sınıftaki değişkenleri ve metotları kullanamaz.

Erişim Belirteçleri

Türetilmiş bir sınıfa, temel sınıftaki elemanlardan sadece public ve protected olarak tanımlananlar aktarılır. Erişim belirteci private olan elemanlar kalıtım ile aktarılmaz.

Erişim Belirleyicisi: Metot ve özelliklere olan erişimin sınırlarını belirtmektedir. (Bknz: C# – Sınıflar)

  1. Private: Sadece tanımlandığı sınıf içerisinden erişilebilir. (Kalıtım ile aktarılmaz.)
  2. Public: Her yerden erişilebilir. (Kalıtım ile aktarılır.)
  3. Internal: Sadece bulunduğu projede erişilebilir. (Kalıtım ile aktarılır.)
  4. Protected: Tanımlandığı sınıfta ve o sınıfı miras (kalıtım) alan sınıflardan erişilebilir. (Kalıtım ile aktarılır.)

TemelSinif içerisindeki degisken_3‘ün erişim belirteci private olduğu için TuretilmisSinif‘a aktarılmaz. Sadece TemelSinif içerisinde kullanılabilir.

TemelSinif içerisindeki degisken_2‘nin erişim belirteci public olduğu için TuretilmisSinif‘a aktarılır. Yukarıdaki örnekte TuretilmisSinif içerisinde degisken_2 adında bir değişken tanımlanmamış olmasına rağmen TemelSinif‘tan kalıtım aldığı için Metot_2() içerisinde kullanılabilmiştir.

TemelSinif içerisindeki degisken_1‘in erişim belirteci protected olduğu için TuretilmisSinif‘a aktarılır. Yukarıdaki örnekte TuretilmisSinif içerisinde degisken_1 adında bir değişken tanımlanmamış olmasına rağmen TemelSinif‘tan kalıtım aldığı için Metot_1() içerisinde kullanılabilmiştir.

Peki bu durum da public ile protected belirteçleri arasındaki fark nedir? 

Kalıtım

TemelSinif‘dan TuretilmisSinif‘a kalıtım yoluyla aktardığımız “degisken_1 (protected)” ve “degisken_2 (public)” elemanlarını TuretilmisSinif içerisinde kullanabiliriz. Ancak TuretilmisSinif‘dan oluşturduğumuz bir nesne üzerinden sadece “degisken_2” elemanına erişebiliriz. Erişim belirteci protected olan degisken_1 elemanına başka bir sınıftan erişemeyiz. Bunun nedeni; Erişim belirteci protected olan elemanlar tanımlandıkları sınıfta ve  kalıtım yolu ile aktarıldıkları sınıflar da private elemanların özelliklerini gösterirler.

Erişim belirteci protected olan elemanların private elemanlardan tek farkı kalıtım yolu ile aktarılabiliyor olmalarıdır. Eğer türeme söz konusu değilse protected olarak bildirilen elemanlarla private olarak bildirilen elemanlar arasında bir fark kalmaz. Erişim belirteci protected olan elemanları, kalıtım yolu ile aktarılabilen private elemanlar olarak düşünebiliriz.

Serdar YILMAZ

C# – Static Elemanlar ve Sınıflar

dotnetBir sınıf içerisindeki static olmayan metotlara ve özelliklere o sınıftan oluşturduğumuz nesneler üzerinden erişiriz. Static olan metotlara ve özelliklere ise nesne oluşturmadan sınıf adı ile erişiriz.

Static olmayan elemanlar nesneye özgü bilgileri tutarken static olan elemanlar uygulama çalıştığı sürece kendilerine en son atanan değeri tutarlar. AdiSoyadi ve Numara değişkenleri static olmadığı için Ogrenci sınıfından oluşturulan her bir nesne için farklı değerler tutabilirler. OgrenciSayisi değişkeni ise static olduğu için kendisine en son atanan değeri tutacaktır.

Bir özelliği veya metodu static yapmak için erişim belirleyicisinden sonra “static” anahtar kelimesini getirmemiz gerekir.

Static bir metodun içerisinden static olmayan metotlar ve değişkenler çağrılamaz. Sadece diğer static metotlar ve değişkenler çağrılabilir.

Static Yapıcı Metotlar

Yapıcı metotları da normal metotlar gibi static olarak tanımlayabiliriz. Sınıfın static değişkenleri ile ilgili işlemler static yapıcı metodun içerisinde yapılabilir. Static yapıcı metotlar parametre almazlar ve erişim belirteçleri yoktur.

Kullanici sınıfının iki adet yapıcı metodu bulunmaktadır. Bunlardan static olanı kullanicisayisi isimli static değişkenin başlangıç değerini atarken, static olmayanı Nick ve EMail değişkenlerinin atama işlemlerini gerçekleştirmektedir.

Kullanici sınıfından ilk nesne oluşturulduğunda hem static yapıcı metot hemde static olmayan yapıcı metot çalışacaktır(İlk static yapıcı metot çalışır). İlk nesneden sonra oluşturulacak diğer tüm nesnelerde sadece static olmayan yapıcı metot çağrılacaktır. Yani static yapıcı metot sadece ilk nesne oluşturulduğunda çalışır.

Static Sınıflar

Oluşturduğumuz sınıf içerisinde sadece static metotlar ve değişkenler bulunuyorsa sınıfı static olarak tanımlayabiliriz. Sınıfların static olarak tanımlanması bir zorunluluk değildir sadece okunabilirliği arttıran bir yaklaşımdır.

Matematik sınıfının üye elemanları(Topla ve Carp metotları) static olduğu için sınıfı da static olarak bildirdik. Matematik sınıfının static olduğunu gören bir programcı, sınıf içerisinde sadece static elemanların bulunduğunu anlayacaktır.

Static sınıflarla alakalı bilinmesi gerekenler;

  1. Static sınıflardan nesne oluşturulamaz. (new Matematik; YANLIŞ)
  2. Static sınıf türünden referanslar oluşturulamaz. (Matematik m; YANLIŞ)
  3. Static sınıfların içinde static olmayan metot yada değişken tanımlanamaz.
  4. Static sınıflarda kalıtım yoktur.

Serdar YILMAZ

C# – Garbage Collection ve Yıkıcı Metotlar

dotnetYıkıcı metotlara geçmeden önce Garbage Collection mekanizması hakkında bilgi vermekte fayda var.

Garbage Collection

Garbage Collection erişilemeyen nesneleri silerek belleğin verimli bir şekilde kullanılmasını sağlamaktadır. Konuyu örnekler üzerinden açıklamaya devam edelim;

Yukarıdaki kod satırında “new Ogrenci()” komutu ile Heap bellek bölgesinde Ogrenci sınıfından bir nesne oluşturduk. Bu nesneye erişebilmek için adresini, belleğin Stack bölgesinde tutulan “ogr” ismindeki işaretçiye aktardık. Herhangi bir şekilde “ogr” isimli işaretçiyi kaybedersek, Heap bellek bölgesinde oluşturduğumuz nesneye erişmemiz mümkün olmayacaktır. Erişilemeyen nesnelerde Garbage Collection tarafından silinerek bellekte gereksiz yer kaplaması önlenecektir.

Bu örneğimizde Ogrenci sınıfından iki adet nesne oluşturduk. 1. ve 2. satırlarda ilk oluşturduğumuz nesnenin adresini “ogr1” işaretçisine, ikinci oluşturduğumuz nesnenin adresini “ogr2 işaretçisine aktardık. 3. satırda ise ikinci nesnenin adresini, ilk nesnenin adresini tutan “ogr1” işaretçisine aktardık. Yani artık ogr1 işaretçisi, ilk nesnenin adresini değil ikinci nesnenin adresini tutmaktadır. İlk oluşturulan nesnenin adresi kaybedildiği için artık o nesneye ulaşmak mümkün olmayacaktır. Nesneye erişimin mümkün olmadığı durumlarda nesnenin bellekte kalmasının bir anlamı yoktur. Bu yüzden Garbage Collection tarafından silinecektir.

Garbage Collection, Stack, Heap

Garbage Collection mekanizmasının ne zaman devreye gireceği kesin olarak bilinemez. Arkaplanda programcıdan bağımsız bir şekilde çalışmaktadır.

Yıkıcı Metotlar

Erişilemeyen bir nesnenin Garbage Collection tarafından silinmeden hemen önce çalışan metoduna Yıkıcı Metot denilmektedir. Bir nesnenin silinmeden önce yapmasını istediğimiz şeyleri o nesnenin yıkıcı metodu içerisine yazarız.

Yıkıcı Metot Nasıl Tanımlanır ?

  1. Yıkıcı metodun adı sınıf adıyla aynı olmalıdır ve başında “~” işareti olmalıdır.
  2. Parametresi, geri dönüş değeri ve erişim belirteci olmamalıdır.

Oyuncu sınıfından her nesne oluşturulduğunda “OyuncuSayisi” isimli static değişkenin değeri bir arttırılacak ve nesne silinmeden önce değeri bir azaltılacaktır.

Serdar YILMAZ

C# – Byte Birimindeki Sayısal Büyüklüğü Byte’ın Katlarına Çevirme

dotnet

Açıklama

BytesToString() metodu; parametre olarak girilen sayısal büyüklüğü Byte’ın ilgili katına çevirmektedir.

Kod

Önizleme

Serdar YILMAZ

C# – GET ve SET Metotları

dotnet

Set ve Get metotlarını birer kontrol mekanizması olarak düşünebiliriz. Olası problemleri önlemek, işlemleri güvenilir ve kontrollü bir şekilde gerçekleştirmek için Set ve Get metotlarını kullanırız.

Basit bir senaryo üzerinden konumuzu açıklamaya devam edelim. Otel otomasyonu için müşteri bilgilerini tutan bir sınıf tasarladığımızı düşünelim. Müşterinin ad-soyad, TC kimlik numarası ve oda numarası bilgilerini tutmak istiyorsak aşağıdaki gibi bir tasarım yapabiliriz.

Musteri sınıfının üyeleri public olarak bildirildiği için bu üyelere doğrudan erişilip değerler atanabilir. İşte bu noktada kontrolü elimize almamız lazım aksi taktirde TC kimlik numarası eksik/fazla girilebilir veya 120 odalı bir otelde oda numarası negatif veya 120’den büyük girilebilir. Amacımız dikkatsizlik sonucu yaşanabilecek olası sorunların önüne geçmek. Bu yüzden üyelere doğrudan erişimi engelleyip (Private), Get ve Set metotları ile kontrollü bir erişim sağlayacağız.

Sınıfın AdSoyad, TCNo, OdaNo üyelerini diğer sınıfların erişimine kapattık (private) ve bu üyelere olan erişimi adsoyad, tcno, odano özellikleri üzerinden kontrollü bir şekilde sağladık. (else bloklarında exception fırlatabilirdik ancak istisnai durum yönetimini anlatmadığımız için şimdilik es geçiyoruz.)

GET Metodu

Bir özelliğin değeri okunmak istenildiğinde o özelliğe ait GET metodu çalışır.

Console.WriteLine(m1.adsoyad);

m1 nesnesinin içerisindeki adsoyad özelliğinin Get metodu çalışacaktır.

SET Metodu

Bir özelliğe atama yapılmak istenildiğinde o özelliğe ait SET metodu çalışır. Atanan değere SET metodu içerisinde value anahtar sözcüğü ile erişilir. value anahtar sözcüğünün önceden belirlenmiş herhangi bir türü yoktur. Özelliğe atanacak değer hangi türden ise value da o türden olur.

m1.adsoyad=”Serdar Yılmaz”;

m1 nesnesinin içerisindeki adsoyad özelliğinin SET metodu çalışacaktır ve value ifadesi “Serdar Yılmaz” değerini alacaktır.

Bir özelliğin sadece GET metodunu tanımlayarak özelliği sadece okunabilir hale getirebiliriz.

Erişim Belirleyicisi Kullanımı

GET ve SET metotlarında erişim belirleyicilerini kullanarak erişimin sınırlarını belirtebiliriz.

Yukarıdaki örneğimizde SET metodu private olarak bildirildi. Bu yüzden diğer sınıflardan adsoyad özelliğinin değeri okunabilir ancak herhangi bir atama yapılamaz (set metoduna sadece sınıfın içinden erişilebilir). Eğer SET metodunu private olarak bildirmeseydik; adsoyad özelliği public olduğu için SET metodu da otomatikmen public olacaktı.

GET ve SET metotları için herhangi bir erişim belirteci bildirilmezse, varsayılan olarak özelliğin erişim belirtecini alırlar.

Serdar YILMAZ

C# – This Anahtar Sözcüğü

dotnet

this anahtar sözcüğü ilgili nesnenin referansını belirtmektedir. Konuyu daha anlaşılır kılmak için örnek uygulamalar üzerinden gideceğiz.

Yukarıdaki veri modelinde sınıfın üye elemanları ile yapıcı metodun parametrelerinin aynı isimlere sahip olduğu görülmektedir. Peki yapıcı metot içerisinde AdSoyad değişkenine erişmek istediğimizde; sınıfın üye elemanı olan AdSoyad değişkenine mi erişiriz yoksa yapıcı metodun parametresi olan AdSoyad değişkenine mi ? İşte bu noktada this anahtar sözcüğü sorunun cevabını netleştirip, kaynak kodlarımızın okunabilirliğini arttırmaktadır.

this anahtar sözcüğü ile nitelenen değişkenler sınıfın üye elemanlarıdır. Yukarıdaki veri modelinde yapıcı metoda parametre olarak gönderilen değerler, sınıfın üye elemanlarına aktarılacaktır.

Yukarıdaki programımızı inceleyecek olursak; Silindir sınıfının iki adet yapıcı metodu bulunmaktadır. Silindir sınıfından nesne oluşturulurken 3 adet parametre girildiğinde; 1. parametre silindirin yarıçapını, 2. parametre yüksekliğini, 3. parametrede PI sayısının kaç alınacağını belirtecektir.

Eğer Silindir sınıfından nesne oluşturulurken 2 parametre girilirse; 1. parametre silindirin yarıçapını, 2. parametre yüksekliğini belirtecektir ve PI sayısı da “3.1415” olarak alınacaktır. Peki bunu nasıl yaptık ?

İçeriğimizin başında this anahtar sözcüğünün ilgili nesnenin referansını belirttiğini söylemiştik.

public Silindir(double yaricap, double yukseklik) : this(yaricap, yukseklik, 3.1415) { }

this anahtar sözcüğü ile; girilen 2 parametreyle beraber, PI girilmediği taktirde varsayılan olarak kabul edilmesini istediğimiz değerini, double tipinde 3 parametre alan yapıcı metoda gönderdik. Böylece 2 parametre alan yapıcı metodu, 3 parametre alan yapıcı metottan faydalanarak kullandık.

Yapıcı metotların aşırı yüklenmesini anlatırken yukarıdaki programı this anahtar sözcüğünü kullanmadan yazmıştık (Bkz:C# – Yapıcı Metotlar). Kaynak kodlarını karşılaştırıp aradaki farkı daha iyi anlayabilirsiniz.

Yukarıdaki program Opsiyonel(Optional) Parametreler kullanılarak tek bir yapıcı metot ile yazılabilir.

Serdar YILMAZ

C# – Yapıcı Metotlar

dotnet

Bir sınıftan nesne oluşturulduğu an arkaplanda otomatik olarak çalıştırılan metotlara yapıcı metotlar denilmektedir. Bu yüzden nesne oluşturulduğunda otomatik olarak yapılmasını istediğimiz işlemleri yapıcı metotların içerisine yazarız.

Yapıcı Metotlar Nasıl Tanımlanır ? 

  1. Yapıcı metotların isimleri sınıf isimleri ile aynı olmak zorundadır.
  2. Public olarak bildirilmeleri gerekir.
  3. Geri dönüş değerleri yoktur.

new Matematik()” ifadesi ile Matematik sınıfından bir nesne oluşturulduğu an yapıcı metot otomatik olarak çalışacak ve PiSayisi özelliğine 3.1415 değerini, EulerSayisi özelliğine 2.7182 değerini atayacaktır.

Sıradan metotlar gibi yapıcı metotlarda parametre alabilmektedir. Ancak yapıcı metotlar nesne oluşturulduğu an çalıştığı için parametreler nesne oluşturulurken girilmelidir.

Bir önceki yazımızda Sınıfları anlatırken yukarıdaki programı yapıcı metot kullanmadan hazırlamıştık (Bkz:C# – Sınıflar). Her iki kaynak kodu karşılaştırıldığında, yapıcı metodun Main()‘de ki kod kalabalığını azalttığı ve özelliklere olan erişimi daha kontrollü bir şekilde sağladığı görülecektir.

Yapıcı Metotların Aşırı Yüklenmesi

Tıpkı sıradan metotlar gibi yapıcı metotlarda aşırı yüklenebilir. Metotları anlatırken imza kavramına ve metotların aşırı yüklenmesine değinmiştik (Bkz: C# – Metotların Aşırı Yüklenmesi). Yinede kısaca bahsetmek gerekirse; parametre sayısı ve parametrelerin tipinden en az birisinin farklı olması şartıyla birden fazla yapıcı metot tanımlanabilir.

Varsayılan Yapıcı Metot

Her sınıfın biz tanımlasak da tanımlamasak da bir yapıcı metodu vardır. Bu yapıcı metoda varsayılan yapıcı metot denilmektedir. Default olarak sınıf içerisinde yer alan bu yapıcı metodun görevi; sınıf içerisindeki özelliklere(değişkenlere) herhangi bir ilk değer vermediğimizde, bu özelliklerden numerik olanlara “0”, bool tipinde olanlara “false ” ve string gibi referans tipli olanlara da “null” değerini atamaktadır.

Serdar YILMAZ

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

C# – Opsiyonel ve İsimlendirilmiş Parametreler

dotnet

Opsiyonel(Optional) Parametreler

Parametrelere varsayılan değerler verebilmek için Opsiyonel Parametreleri kullanırız. Varsayılan değeri olan bir parametreye, metot çağrımı esnasında herhangi bir değer verilmediğinde varsayılan değeri metot içerisinde kullanılır.

Opsiyonel parametreler normal parametrelerden sonra yazılmalıdır. Yani Opsiyonel bir parametreden sonra opsiyonel olmayan normal bir parametre yazılamaz.

İsimlendirilmiş(Named) Parametreler

Metot çağrımı yaparken parametre sırasından bağımsız olarak hangi parametreye hangi değeri atayacağımızı açık bir şekilde belirtebiliriz. İsimlendirilmiş parametrelerin kullanımı çok sayıda parametre alan metotların okunabilirliğini arttırmaktadır.

Serdar YILMAZ