C# eğitimlerimize struct (Yapılar) konusu ile devam ediyoruz.
Struct Türkçe karşılığı yapıdır. Yapılar C# da bir nesneyi temsil eden veri tipidir. Şimdiye kadar gördüğümüz int, short, byte gibi tüm veri tipleri aslında bir yapıdır. Yapılar object sınıfından türeyen birer nesnedirler. Her nesnenin sahip olduğu özelliklere de sahiptiler. İçerinde field(değişken), metodlar bulunabilir. Böyle bakıldığında sınıf yapısına çok benzer özellik göstermektedir. Ama bazı işlerimizde sınıf yapısını kullanmak programımızı hantallaştırabilir. Bu gibi durumlarda imdadımıza yetişen nesne struct’dır.
Daha çok şu sebeple kullanılabilir. Aynı grup verileri bir arada tutma. Metodlarını bir arada tutmak için kullanılır. Bu hem kod okunurluğunu, hem kod yazma hızınızı hemde programınızın performansını artıracaktır.
// Yapının Elemanları
Olayı daha iyi anlayabilmek için bir senaryo düşünelim. Bir insan kaynakları projesi yazıyorsunuz. En nihayetinde programın bir yerinde mutlaka kişilere ait bilgileri almanız gerekecek. 3 tane bilgisini alalım. PersonelNo, Adı, Soyadı. PersonelNo ile herhangi bir matematiksel işlem yapmayacağımız için o değerde string olduğunu varsayalım. Şimdiye kadar bildiğimiz yöntemde bu değişkenleri tanımlayacak ve değer ataması yapacak olsaydım şunu yapardım.
Şimdi bunu birde struct kullanarak yapalım. Sonrada faydaları nelerdir avantajları nelerdir bundan bahsedelim.
public string PersonelNo;
Personel PersonelBilgi = new Personel();
PersonelBilgi.PersonelNo = “11111”;
PersonelBilgi.Adi = “Murat”;
PersonelBilgi.Soyadi = “Bilginer”;
Öncelikle bahsettiğim 3 değişkenin nasıl bir grup oluşturduğuna karar verdim. Bu 3 değişken Personel yapısı altında ortak bir yapıda tutulabilir.
Yapılar bir sınıf gibi tanımlanırlar.
Metodlar içinde struct tanımlaması yapamazsınız.
Bizde aşağıdaki kısımda bunu gerçekleştirdik.
struct tanımlama cümlesi sonra karar verdiğimiz yapı ismi(Personel) daha sonrada elemanlarını tanımladık.
Burada önemli bir noktada şudur tanımlama geçerlilik aralığını belirleyen public ifadesi. Kural belirtmeden direk tanımlanırsa Default değeri Private’dır. Metodlar içinde bu değişkenlere erişebilmek için public yada internal tanımlaması yapılmalıdır.
Personel yapısını kullanabilmek için ileriki derslerde göreceğimiz sınıflardaki gibi öncelikle o yapıdan bir nesne türetilir. Bu türetilen nesneye istediğiniz adı verebilirsiniz.
Nesne ismi ile içindeki değişkenlere ulaşıp değer ataması yapabilirsiniz. Sadece değer ataması değil atanmış değerleri çağıradabilirsiniz.
Yapılar diğer nesneler gibi object sınıfından türerler.
Kalıtımı desteklemez ( Bu konu ileride detaylı işlenecektir)
Değerlerini kullanabilmek için new anahtar sözcüğü ile yapının bir nesnesi örneği oluşturulabilir.
Ancak sınıflardan ayıran bir özelliğide budur new anahtar sözcüğü kullanmadan da yapılar tanımlanabilir.
Bunu hemen örneklemek gerekirse ilk başta bahsettiğim gibi yapılarda int, byte gibi bir veri tipidir.
int a; // Böyle bir tanımlama yapılabildiği gibi
Personel PersonelBilgisi; // Şeklinde struct yapısından bir değişken türetilebilir.
Yapılar değer tiplidirler.
Bu yüzden ramde stack bölgesinde bulunurlar.
Erişim ve kullanımları hızlıdır.
Kullanımları bittiği anda bellekten silinirler.
Sınıf yapısı ile hemen hemen aynıdır. Ama basit değişken işlemlerimizde struct kullanmak avantajlıdır. Çünkü sınıflar referans tipli değişkenlerdir. Ve Ram’de Heap alanında saklanırlar. Bu değerlere ulaşmak stack alanındaki bir değere ulaşmaktan daha yavaştır.
Bu sebeple structlar basit değişken tanımlama işlerinde sınıf yapılarının önüne geçmektedir.
struct yapısıda bu şekildeydi. Örnek projemizi projeler kısmından indirebilirsiniz.