C# Struct (Yapı) Nedir? Nasıl Kullanılır?

Bir struct birçok yönden bir class (sınıfa) benzer. Sınıflar gibi, property (özellikler), constructor (yapıcılar), method (metotlar) ve field (alanlar) gibi öğeler içerirler ve ilgili üyeleri tek bir pakette gruplandırmanıza olanak tanır, böylece onları bir grup olarak işleyebilirsiniz.

Bir struct (yapı) ve bir class (sınıf) arasında iki temel fark vardır. İlk olarak, struct (yapı) kalıtımı (inheritance) desteklemiyor. Dolayısıyla bir yapıyı diğerinden türetemezsiniz. Struct’lar (yapılar) ve class’lar (sınıflar) arasındaki ikinci temel fark ise class’ların (sınıfların) referance (referans) tipleri iken struct’ların (yapıların) value (değer) tipli olmasıdır.

Bir struct (yapı) bildirmek için “struct” anahtar sözcüğünü kullanırsınız.

Örnek:

struct YeniStruct
{
    //Fields
    private int x, y;
    private YeniSinif yeniSinif;
    private HaftaninGunleri haftaninGunleri1;
 
    //Constructor
    public YeniStruct(int a, int b, int c)
    {
       yeniSinif = new YeniSinif();
       yeniSinif.sayi = a;
       x = b;
       y = c;
       haftaninGunleri1 = HaftaninGunleri.Pazar;
    }
 
    //Metot
    public void Bildirim()
    {
       Console.WriteLine("x = {0}, y = {1}, Haftanin Günü = {2}", x, y,
       haftaninGunleri1);
    }
}

class YeniSinif
{
    public int sayi;
}

enum HaftaninGunleri
{
    Pazartesi, Sali, Carsamba, Persembe, Cuma, Cumartesi, Pazar
}

Satır 1’den 23’e kadar Struct bildirilir. 4. satırda, struct için iki private int field bildirdik. 5. satırda, YeniSinif adında başka bir private field ilan ettik. Bu alan, YeniSinif adlı sınıfının bir örneğidir (instance). 6. satırda, HaftaninGunleri adında bir enum değişkeni bildirdik. İki field (alan) (YeniSinif ve HaftaninGunleri), bir sınıf örneğini ve bir enum değişkenini bir struct’ın (yapının) alanları olarak nasıl ekleyebileceğimizi göstermek için bu örneğe private olarak dahil edilmiştir. Yapılar (ve sınıflar), enum değişkenlerini ve diğer struct (yapı) ve class (sınıfların) örneklerini (instance) field (alan) olarak içerebilir.

Fields (Alanları) bildirdikten sonra, struct’ın (yapının) constructur’ını (kurucusunu) bildirdik (9’dan 16’ya kadar satırlar), ardından x, y ve HaftaninGunleri değerlerini yazdırmak için bir metot izledik. (satır 19 ila 22). Enum
bildirdikten sonra, 25 ile 28 arasındaki satırlarda YeniSinif class’ını (sınıfını) ve 30. satırdaki enum HaftaninGunleri class’ını (sınıfını) bildirdik. Bu örnekte, YeniStruct struct’ının (yapısının) dışında class’ı (sınıfı) ve enum’u bildirdik. Ancak, struct’ın (yapının) kendi içinde enum veya class’ı (sınıfı) bildirmemiz mümkündür. Bir enum, struct
veya class (sınıf), başka bir struct veya class’ın (sınıfın) içine yerleştirilebilir.

Yukarıdaki struct’ı (yapıyı) kullanmak için Main() metodumuza aşağıdaki kodu ekleyebiliriz.

YeniStruct yeniStruct = new YeniStruct(2, 3, 5);
yeniStruct.Bildirim();

Sonuç:

x=3, y=5, Haftanin Günü = Pazartesi