C# dili nesne yönelimli bir programlama dili olduğundan ötürü, nesneler çok büyük bir öneme sahiptir. C#'te herşey bir nesnedir. Nesne kavramını duyduğumuzda aklımıza gelen ilk şey Constructor(yapıcı) metottur. Çünkü bir nesnenin örneklenip Ram'e çıkabilmesi için constructor metot çağrısı yapılması gerekir.
Constructor metodun özellikleri ;
1-Geriye değer döndürmez.
2-İsmi,tiple aynı olmak zorundadır.
3-istenildiği bir anda çağrısı yapılamaz. Özel bir çağrılma biçimi vardır.
4-Nesne üretmek için çağırılan metottur. Constructor metot çağırılmadan heap'te nesne üretilemez.
C#'ta belki de en önemli anahtar sözcük "new" anahtar sözcüğüdür. Bu anahtar sözcüğün yazılması demek, nesne üretmek anlamına gelmektedir. İşte tam bu noktada Constructor kavramı devreye girer. Yukarıda da bahsettiğim gibi, nesne üretmek için Constructor metot çağrısı yapılmak zorundadır. "new" anahtar sözcüğü ile bu çağrıyı yapmış oluruz. Özel bir çağırma biçimi olmasından kasıt aslında budur.
Neden constructor metot yazarız;
1-Nesneye ilk değer atamaları yapabilmek.
2-Nesne kullanıcısını, belli değerleri vermesi konusunda zorlamak.
3-Nesne oluşurken yapılacak ekstra işleri kodlamak.
Elimizde bir Urun sınıfı olsun.
class Urun
{
public int Id;
public string Ad;
public double Fiyat;
}
Sadece id, ad ve fiyat alanlarına sahip bu Urun sınıfının nesnesini örneklemek istersek;
class Program
{
static void Main(string[] args)
{
Urun u1 = new Urun();
}
}
Girişte bahsettiğim gibi, "new" anahtar sözcüğü nesne üretmek anlamına gelir. Dolayısı ile burada aklımıza gelen ilk şey, bir Urun nesnesi oluşturmak için Urun sınıfının Constructor metodunu çağırmamız gerektiğidir. Zaten new anahtar sözcüğü ile bu metodu çağırmış oluyoruz. Dikkat ederseniz Urun sınıfına Constructor metot yazmadım ve nesne üretmek için bu metoda ihtiyacımız olduğunu da söylemiştik. Peki yapıcı metot yazılmadığı halde nasıl nesne üretildi?
-Bir class(sınıf) ya da struct(yapı) içerisinde contructor yazılmamışsa, default(varsayılan) olarak o tipin parametre almayan constructor'ı çağrılır.
public Urun()
{
}
Yani, Urun sınıfında constructor metot yazmadığımız zaman yukarıda gördüğümüz constructor metot default olarak yazılacaktır. Oluşan assembly'nin IL kodları incelendiğinde oluşan constructor metodu görmemiz mümkündür. Özelliklerinde bahsettiğimiz gibi, ismi Urun tipi ile aynıdır.
Şimdi de nesne oluşturulurken, field'lara değer atama konusunda kullanıcıyı zorlayan bir constructor metot yazalım;
class Urun
{
public int Id;
public string Ad;
public double Fiyat;
public Urun(int id, string ad, double fiyat)
{
Id = id;
Ad = ad;
Fiyat = fiyat;
}
}
Artık new anahtar sözcüğü ile nesneyi örneklerken; id,ad ve fiyat alanlarına ilk değerlerini atamak zorundayız.
class Program
{
static void Main(string[] args)
{
Urun u1 = new Urun(1, "Monitör", 200);
}
}
Yukarıda, u1 nesnesini, Urun metoduna, yani constructor metoda, istediği parametreleri vererek oluşturduk.
Burada önemli bir nokta var. Artık Urun sınıfımda, 3 tane parametre alan bir yapıcı metot tanımlanmış durumda. Şimdi ilk örnekte yaptığımız gibi, ilk değer ataması yapmadan nesne örneklemeye çalışalım.
Yukarıdaki kodu derlemeye kalktığımızda compiler'dan red cevabı alarak, bir hata ile karşılaşacağız;
Anlamı şudur:"Urun sınıfında parametre almayan bir Constructor Metot yok". Buradan çıkaracağımız sonuç;
-Tasarladığımız tip içerisine bir Constructor metot yazılmışsa, default(varsayılan) olarak, yazılan bu metot çağırılır. Eğer yukarıdaki gibi parametre vermeden bir Urun nesnesi oluşturmak istersek, Constructor'ı overload ederek parametre almayan versiyonunu da tanımlamamız gerekir.
17 yorum:
Açıklayıcı bilgileriniz için teşekkür ederim.
Teşekkür ederim Güzel bir açıklama olmuş
güzel ve net bir anlatim teşekkurler faydali oldu...
harika!
Teşekkurler :)
çok teşekkürler :)
C#'ta her şey bir nesnedir? bence felsefik bir cümle olmuş..
güzel paylaşım. açık ve de net bir paylaşım olmuş.
Aciklama icin tesekkurler
Aciklama icin tesekkurler
çok kötü
sedat naber kanka bende iyiyim
Dersten yazıyorum iyi günler cok teşekkür ederiz açıklama için bu arada HAKER BİLALE SELAMLAR <3 Galp BİLAL Galp<3
anladığım kadarıyla constructor metotu varsayılan değerleri belirtmek için kullanıyoruz.
urun class ı
public int id { get; set; }
public string ad { get; set; }
public int fiyat { get; set; }
public Urun(int Id,string Ad,int Fiyat)
{
id = Id;
ad = Ad;
fiyat = Fiyat;
}
Main class
static void Main(string[] args)
{
Urun urun = new Urun(1,"bilgisayar",12);
Console.ReadKey();
}
Urun urun = new Urun(1,"bilgisayar",12);
Bu kısımı nasıl ekrana yazdırabiliriz peki?
adamsın usta
Dolandırmadan, yormadan anlatmışsınız, tebrikler.
Güzel bir çalışma olmuş elinize sağlık
Yorum Gönder