Anasayfa / Yazılım / C# / Structures

Structures

Structures (yapılar) value tipinde nesnelerdir ve System.Object’ten türemişlerdir. Class’lar ise referans tipinde nesnelerdir. Dolayısı ile bu ikisi arasındaki temel farklılık bellek üzerinde kullanmış oldukları alanlardır. Bu alanlar STACK ve HEAP olarak adlandırılır. Bilindiği gibi, value type nesneler STACK alanı üzerinde tutulurken reference type nesneler HEAP alanı üzerinde tutulur. HEAP üzerinde tutulan Reference Type nesneleri .NET kontrol etmektedir ve bunları point eden değerler ise STACK üzerinde tutulmaktadır.

Structures STACK alanı üzerinde çalışırlar ve en büyük avantajları HEAP’de çalışanlara göre daha hızlı bir şekilde çalışmasıdır. Dezavantajları ise, Structures başka bir structure yapısına inheritence (miras) veremez veya alamaz. Dolayısı ile bize genişleyebilir bir alan sunmamaktadırlar.

Diğer bir dezavantajda structures value type nesnelerdir ve normalde biz bir reference type nesneyi birbirine eşitlerken, örneğin stack üzerinde bulunan a ve b ‘yi birbirine eşitlerken aslında b ve a’nın da heap alanında aynı yeri referans etmesini sağlıyoruz. Aynı işlemi structure ile yaptığımız da ise stack alanı üzerinde a ve b için ayrı ayrı alan açılıyor fakat aynı noktayı referans etmiyor, birbirinden bağımsız oluyor yani aynı structure’dan bir kopya daha oluşuyor.

Örneğin bir structure yaptık ve bunu bir class’ın içine bir methoda bir parametre olarak gönderdiğimizi varsayalım. Methoda gönderdiğimiz bu parametre için yeni bir kopya oluşturuluyor. Methoddab değişken geriye geliyor ve STACK’da yeni bir koya oluşuyor. Her bu işlem sonucu STACK alanında yeni bir kopya oluştuğu için STACK alanı iyice şişiyor ve performans kaybı yaşanıyor.

Buradan anladığımız kadarı ile Structure’ları kullanmanın en iyi yöntemi küçük ve tek başına iş yapabilecek durumlarda kullanmatır. Daha sonra genişleyebilir bir yapı istiyorsak CLASS kullanmamız en doğrusu olacaktır.

Bu anlatılanları bir kod örneği ile açıklarsak daha net anlaşılacağı kanısındayım.

Structure’lar üstte belirttiğim gibi System.Object’ten türemiştir. Ayrıca Structure’larda Constructorlar kullanılabilir yalnız Structure Constructure’larında CLASS’lardakinden farklı olarak parametresiz Constructor kullanamayız. Bunları aşağıdaki kod örneğinde görebileceksiniz..

Structure’lar miras alınmayacak ve verilmeyecek ise, genişleme söz konusu değilse, çok fazla işlem yapılmayacak ise ve basit işlemlerde Class’ların yerine tercih edilebilir çünkü daha hızlıdırlar fakat aksi durumlarda CLASS tercih etmek en doğrusu olacaktır. Örnek verirsek, bir e-ticaret sitesinin siparişe ait başlık bilgilerini tutmak gibi işlemlerde kullanılabilir.

Bir yorum

  1. gerçekten çok yararlı oldu çok teşekkür ederim hocam….

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir