28 Şubat 2011 Pazartesi

C# Constructor (Yapıcı) Metot

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.

ctor8

Ş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.

ctor6

Yukarıdaki kodu derlemeye kalktığımızda compiler'dan red cevabı alarak, bir hata ile karşılaşacağız;

ctor7

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:

Adsız dedi ki...

Açıklayıcı bilgileriniz için teşekkür ederim.

Unknown dedi ki...

Teşekkür ederim Güzel bir açıklama olmuş

Adsız dedi ki...

güzel ve net bir anlatim teşekkurler faydali oldu...

Adsız dedi ki...

harika!

Unknown dedi ki...

Teşekkurler :)

Adsız dedi ki...

çok teşekkürler :)

Adsız dedi ki...

C#'ta her şey bir nesnedir? bence felsefik bir cümle olmuş..

Adsız dedi ki...

güzel paylaşım. açık ve de net bir paylaşım olmuş.

ENES USANMAZ dedi ki...

Aciklama icin tesekkurler

ENES USANMAZ dedi ki...

Aciklama icin tesekkurler

Adsız dedi ki...

çok kötü

Adsız dedi ki...

sedat naber kanka bende iyiyim

Unknown dedi ki...

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

Adsız dedi ki...

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?

Adsız dedi ki...

adamsın usta

Adsız dedi ki...

Dolandırmadan, yormadan anlatmışsınız, tebrikler.

Adsız dedi ki...

Güzel bir çalışma olmuş elinize sağlık

Yorum Gönder