Performans için Struct ve Class Kavramları
Performanslı Web Uygulamaları geliştirirken dikkat edilmesi gereken bir çok nokta bulunmaktadır. Biz Struct ve Class kavramlarını inceleyeceğiz.
Struct ve Class’lar birbirlerine benzer özellikler içermektedir. En önemli farklılıkları Memory üzerindeki davranışlarıdır. Struct bir Value Type, Class ise Reference Type’tır. Bu çok önemli bir detay.
Reference Type ve Value Type ile ilgili yazıma bu linkten ulaşabilirsiniz.
http://guzelkucuk.com/2020/03/18/object-reference-not-set-to-an-instance-of-an-object
Struct ve Class arasında Constructor farklılıkları da bulunmaktadır. Struct için Default Constructor oluşturulduğunda Derleyici Hatası alınır. Fakat parametrik bir Constructor tanımlaması yapılabilir. Class için Default Constructor engellemesi yoktur.
Class’lar kalıtım yolu ile başka bir sınıftan türetilebilirler. Struct’ta ise böyle birşey yapılamaz. Fakat Struct yapınıza Polymorphism uygulayabilirsiniz. Bu konularla ilgili paylaşacağım bazı forum tartışmaları bulunmaktadır.
https://stackoverflow.com/questions/2310103/why-c-sharp-structs-cannot-be-inherited
https://stackoverflow.com/questions/1222935/why-dont-structs-support-inheritance
New anahtar sözcüğü kullanılarak oluşturulan bir Struct nasıl bir çalışma sergiler örnekle inceleyelim.
Bu şekilde StructSample’ın instance’ı alındığında içerisinde bulunan property’lerin default değerleri atanmış olacaktır. Eğer New anahtar sözcüğü kullanılmasaydı, “Use of possibly unassigned field” hatası alacaktık.
Class’larda olduğu gibi instance alma zorunluluğu yok ama Struct’larda property’leri kullanabilmek için default değerleri tanımlanması gerekiyor.
Struct ve Class Ne Zaman Kullanılmalıdır?
Büyük boyutlara sahip datalarınız için Class kullanmanız daha mantıklıdır. Bunun nedeni Memory yönetimidir. Büyük boyutlu dataların Struct ile Stack’te tutulması performans kaybına yol açacaktır. Aynı şekilde Küçük boyutlara sahip datalarınız için Class kullanırsanız gereksiz yere Heap’i şişirmiş olursunuz. Bu performans açısından büyük bir etkendir.
Çok beğendiğim bir yazıyı paylaşıyorum incelemenizde fayda var.
http://clarkkromenaker.com/post/csharp-structs/
Sonuç
Bu basit görünen seçim bazen size çok fazla hafızaya mâl olabilir, bu yüzden akıllıca seçin!