Yazılım Mimarileri ve Tasarım Desenleri Üzerine

C#’ta Struct Yapıları ve Kullanım Durumları

Merhaba,

Programlama dillerinde en mühim OOP(Object Oriented Programing) yapılarından olan class yapısına göre daha basit düzeyde işlemler gerçekleştirmemizi sağlayan ve belirli bir takım kısıtlamaları yanında barındıran struct yapısını C# diline özel ele alacağız.

Şimdi düşünün ki, bir yapı oluşturacaksınız ve bu yapı birbirleriyle ilişkili verileri barındıracaktır. Haliyle bunu bir class olarak belirleyebilir ve o classtan üretilen nesne üzerinde işlemlerimizi icra edebiliriz. Amma velakin bu yapımız class kadar kompleks işlemler için tasarlanmış bir yapı gerektirmiyorsa ve tutulacak verileri enkapsüle etmek yetiyorsa işte bu tarz durumlarda struct yapısını tercih edebiliriz.

Unutmayınız ki, classlar bir Referans Tipli(Reference Types) özellik gösterirken struct yapıları bir Değer Tipli(Value Types) değişken özelliği göstermektedir.

Yani anlayacağınız “int” gibi, “bool” gibi değer tipli bir değişken oluşturmak istiyorsanız struct yapısını tercih edebilirsiniz.

Bu demek oluyor ki, gerçekleştireceğimiz işlevselliğin yapısal olarak bir nesne yahut değer tipli bir değişken yapısında gerçekleştirilmesini tercih edebilir ve birazdan bahsedeceğim olumlu olumsuz yanlarıda hesaba katarak projenizde performansı daha maliyetli bir hale getirebilirsiniz.

Şimdi struct yapısını C# perspektifinden adım adım değerlendirelim;

Evet, gördüğünüz gibi struct dediğimiz aslen yapısal ve içerik(implicit) olarak bir sealed class‘tır diyebiliriz. Bunun yanında daha hafif(lightweight) bir class yapısı olduğu söylenebilir. İçeriğimizden de anlaşılacağına göre Tip Tanımlama(Type Definition) yaparken kullanabiliriz.

İçerikte bahsedildiği gibi referans değil, değer tipli bir yapı göstermesinin sebebini aşağıdaki örnekten de anlayabiliriz.

Burada dikkat ederseniz eğer ms.x ve ms.y değişmeyeceğinden dolayı bir Deep Copy söz konusudur. Eğer referans tipli yapılar olsalardı aşağıdaki gibi bir sonuç elde edilecekti ve Shallow Copy söz konusu olacaktı.

Gördüğünüz gibi iki referansta aynı nesneyi işaret ettiğinden dolayı referanslar üzerindeki field değerleri doğal olarak aynı sonucu vermekte yani mc.x ve mc.y değişkenlik göstermektedir.

Son olarak struct yapılarıyla ilgili uç bir noktaya daha değinip içeriğimizi sonlandıralım.

struct yapılar, kendilerini this keywordünü kullanarak değiştirebilen yapılardır.

Örneğin;

Aslında bu tarz bir işleme class yapısı izin vermediğinden dolayı ilginç bir özelliktir.

Güzel ve eğlenceli bir konununda sonuna gelmiş bulunmaktayız.
Okuduğunuz için hepinize teşekkür ederim…
Sonraki yazılarımda görüşmek üzere diyelim… 🙂
İyi çalışmalar…

Mobil sürümden çık