C# Eğitimleri – Struct Kullanımı

C# eğitimlerimize struct (Yapılar) konusu ile devam ediyoruz.

Struct Nedir?

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.

Genel Yapı

[php]

struct YapıAdı

{

// Yapının Elemanları

}

[/php]

Yapı Örneği

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.

 

[php]

string PersonelNo;

string Adi;

string Soyadi;

PersonelNo="11111";

Adi="Murat";

Soyadi="Bilginer";

[/php]

Şeklinde olacaktı.

Şimdi bunu birde struct kullanarak yapalım. Sonrada faydaları nelerdir avantajları nelerdir bundan bahsedelim.

[php]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Structs_Yapısı
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

struct Personel
{

public string PersonelNo;
public string Adi;
public string Soyadi;
}
private void button1_Click(object sender, EventArgs e)
{
Personel PersonelBilgi = new Personel();

PersonelBilgi.PersonelNo = "11111";
PersonelBilgi.Adi = "Murat";
PersonelBilgi.Soyadi = "Bilginer";
}
}
}

[/php]

Kod İncelemesi

Ö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 Personel
{

public string PersonelNo;
public string Adi;
public string Soyadi;
}

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.

private void button1_Click(object sender, EventArgs e)
{
Personel PersonelBilgi = new Personel();

PersonelBilgi.PersonelNo = “11111”;
PersonelBilgi.Adi = “Murat”;
PersonelBilgi.Soyadi = “Bilginer”;
}

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ın Özellikleri

  • 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.

[php]

int a; // Böyle bir tanımlama yapılabildiği gibi

Personel PersonelBilgisi; // Şeklinde struct yapısından bir değişken türetilebilir.

[/php]

  • 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.

Bir sonraki eğitim yazımda görüşmek üzere.

Facebook Sayfamizdan Bizleri Takip Edebilirsiniz
Murat Bilginer

Industryolog Akademi Founder – Endüstri Mühendisi
Canias ERP Troia Geliştiricisi & Yazılım Uzmanı
7 Yıldır bildiğini paylaşmak için çabalayan bir blogger.

http://muratbilginer.net/