C Sharp’da Struct Yapısı

C Sharp’da Struct Yapısı
C Sharp’da Struct Yapısı
Yazılım Kodu Kanalına Abone Olun

Herkese merhaba,

Bu yazıda C Sharp’da Struct Yapısı ile ilgili bilgi vermeye çalışacağım.

C Sharp’da Struct Yapısı

C Sharp programlama dilinde Struct’lar Class’lara oldukça benzeyen yapılardır ancak Struct’lar değer tipindedirler. Class’lar ise referans tipindedir.

Bir Class’tan bir nesne oluşturursanız boş olabilir, bir Struct’tan bir nesne oluşturursanız boş olamaz yani Struct’lar Değer tipi olduğu için Struct nesneleri null olamazlar.

Struct’ları tanımlamak için ‘struct’ anahtar sözcüğünü kullanırız.

Class’lara referans aracılığıyla ulaşılırken, Struct’lara doğrudan ulaşılır. Bu nedenle, Struct kullanımı Class kullanımına göre daha az maliyetlidir ve erişim hızı yüksektir.

Struct kullanımında bellek alanında yer ayırma, kopyalama gibi işlemler Heap alanından daha hızlıdır.

Class nesneleri Garbage Collection mekanizması ile Heap alanından silindikleri için yıkıcı metotların ne zaman çağrılacağı kesin bilinemezler. Struct’larda yıkıcı metot olmamasına rağmen faaliyet alanı bitiminde bellekten otomatik silinirler. Struct’lar işleri bittiği zaman bellekten otomatik silindikleri için yıkıcı metotları tanımlayamayız. Kısaca Struct’larda yıkıcı metot yaratılması yasaklanmıştır.

Struct’larda Class’lar gibi türetme yapamayız. Bir Class tanımlarken bir başka Class’ı temel alarak kalıtım oluşturabiliyoruz fakat bir Struct’ı bir başka Struct’ı temel alarak oluşturamayız.

Struct’lar Interface implement edilebilir ancak Struct’lar kalıtımı desteklemezler (başka Class’tan ya da Struct’tan türetilemezler). Class’lar ise hem kalıtımı, hem de Interface’i desteklerler.

Struct elemanlarının default değeri public’tir, Class elemanlarının default değeri ise private’tir.

Struct yapısı için Default Constructor yazamayız. Ancak çok parametreli constructor yazmaya izin verir.

Bir Struct içersinde yer alan Constructor metot içinde tanımlanmış olan alanlara başlangıç değerleri atanmalıdır. Class içinde Constructor kullanılan alanlara başlangıç değerleri atanmaz ise, derleyici bu atamayı otomatik olarak yapar. Ancak derleyici aynı işi Struct’larda yapmaz. Bu nedenle bir Struct içinde Constructor tanımlanmış olan alanlara mutlaka ilk değerlerin verilmesi gerekir.

Büyük boyuttaki veriler ile çalışırken, bu veriler Class içerisinde tanımlandığında, veri aktarımı anında sadece bu verilerin öbekteki başlangıç adresi aktarılır ve ilgili parametrenin de bu adresteki verilere işaret etmesi sağlanmış olur. Böylece büyük boyutlu verileri yığına kopyalayarak gereksiz miktarda bellek harcanmasının önüne geçilmiş olunur. Ancak küçük boyutlarda veriler ile çalışırken bu verileri Class’lar içerisinde kullandığımızda bu kez de gereksiz yere bellek kullanıldığı için öbek şişer ve performans düşer. Bu konuda 16 byte’tan küçük veriler için Struct’ların kullanılması, 16 byte’tan büyük veriler için ise Class’ların kullanılması öngörülür.

Class’larda olduğu gibi Struct’larda da get ve set bloklu özellik ve indeksleyici kullanabiliriz.

Struct’larda üye elemanları Static olarak tanımlanabilirler.

Tıpkı Class’larda olduğu gibi Struct’ların içerisindeki özellikler const ya da readonly olabilir.

Const özelliklerin değerleri Struct metot içinde değiştirilemez.

Struct’lardaki özelliklere Struct içinde ilk değer verilemez (const özellikler hariç).

Struct’lar Birbiri ile ilişkili değerleri bir araya toplamak için kullanılır.

Struct Yapısı ile hazırlamış olduğum örneği görmektesiniz.

using System;

public class Program
{

	public struct Urun
	{
		public int urunNo;
		public string urunAdi;
		public Urun(int urunno, string urunadi)
		{
			urunNo = urunno;
			urunAdi = urunadi;	
		}
	}


	public static void Main()
	{
        Urun yeniurun = new Urun(100, "Bilgisayar");
        Console.WriteLine(yeniurun.urunNo);
	}
}

C Sharp’da Struct Yapısı ile ilgili anlatacaklarım bu kadar.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

Aşağıdaki yazıları da inceleyebilirsiniz...

Sitedeki yazıları kopyalamak yasaktır.