C# Struct(Yapı) ile Class(Sınıf) Kavramları Arasındaki Farklar



Bir çok kez bu kavramlarla karşılaştım fakat tam olarak farkları nedir? bu sorunun cevabını tam olarak bulamamıştım. Sonuçta ikiside ayni şekilde tanımlanıyor, ikisininde efendim propery'leri, değişkeleri, constructor'ları var falan filan.. Bu yüzden bu konuyla ilgili bir araştırma yaptım öğrendiklerimi sizle paylaşıyorum bu konuda benim gibi düşünenler varsa onları aydınlatırsam ne mutlu bana..

Herşeyden önce en önemli fark, yapıların değer türü olması yani belleğin stack bölümünde ve sınıfların referans türü olması yani belleğin heap bölümünde depolanmasıdır. Sınıflar referans type olduğu için adresleri tutarlar, yapılar ise değer türü olduğu için verinin kendisini tutarlar. Bu yüzden büyük boyutlu yapılar için sınıf tanımlamasını seçmek daha mantıklıdır.

Diğer bir fark ise Struct yapısı için default constructor yazamayız. Ancak çok parametreli constructor yazmaya izin verir. Çok parametreli constructor yazarkende dikkat edilmesi gereken nokta tanımlanan değerlere eğer çok paramtereli contructor yazdıysak ilk değerini otomatik atamaz yani her değere ilk değerini atamak zorunda oluruz. Buna default constructor kullanıyorsak gerek yoktur.

using System; 

namespace StructSample1
{           
      struct Zaman
      {
           private int saat,dakika,saniye;
           private string kosucuAdi;                       

          /* Yapı için parametreli bir constructor metod tanımladık. Yapı içinde yer alan kosucuAdi,saat,dakika,saniye alanlarına ilk değerlerin atandığına dikkat edelim. Bunları atamassak derleyici hatası alırız. */

           public Zaman(string k,int s,int d,int sn)
           {
                kosucuAdi =k;
                saat =s;
                dakika =d;
                saniye =sn;
           } 

          /* Bir dizi özellik tanımlayarak private olarak tanımladığımız asıl alanların kullanımını kolaylaştırıyoruz. */
           public string Kosucu
           {
                get
                {
                     return kosucuAdi;
                }
                set
                {
                     kosucuAdi =value;
                }
           }

           public string Saat
           {
                get
                {
                     return saat;
                }
                set
                {
                     saat =value;
                }
           }

           public string Dakika
           {
                get
                {
                     return dakika;
                }
                set
                {
                     dakika =value;
                }
           }


           public string Saniye
           {
                get
                {
                     return saniye;
                }
                set
                {
                     saniye =value;
                }
           }
      } 
code: csharpnedir.com

0 yorum :

Yorum Gönder