4 - C# Kullanıcı Tanımlı Veri Türleri

Kullanıcı Tanımlı Veri Türleri


Struct (Yapı):

Struct veri türü, farklı türlerden değişken tiplerini, özellikleri ve metotları bir çatı altında toplayarak gruplandırmak amacı ile kullanılan veri türü yapısıdır. Değer türünden oldukları için küçük miktarda verinin saklanmasında yüksek performans gösterirler. Yapının içerisindeki her eleman tanımlı olmalıdır. Bir Structın boyutu, içerisindeki tanımlı elemanların boyutunun toplamına eşittir.


 Bir struct aşağıdaki gibi oluşur.


struct structAdi

{

        public degiskenTipi degiskenAdi;

}


Bu struct içersindeki elamana erişmek için ise;

structAdi nesne = new structAdi(); 

şeklinde bir nesne tanımayabiliriz.

örnek:

static void Main(string[] args) 

{

        ogrenci ogrencik = new ogrenci();

        ogrencik.ad = "Ahmet";

        ogrencik.soyad = "Aslan";

        ogrencik.numara = 123;

        ogrencik.sinif = "11G";

        Console.WriteLine("Adı : {0}\nSoyadı : {1}\nNumarası : {2}\nSınıfı : {3}",

            ogrencik.ad, ogrencik.soyad,ogrencik.numara, ogrencik.sinif);

        Console.ReadLine();

}

struct ogrenci

{

        public string ad;

        public string soyad;

        public int numara;

        public string sinif;

}

Çıktı:

Adı : Ahmet 

Soyadı : Aslan 

Numarası : 123

 Sınıfı : 11G  


Struct içinde struct tanımlamakta mümkündür.


struct structAdi2

{

        public degiskenTipi degiskenAdi;

        struct structAdi2

        {

                 public degiskenTipi2 degiskenAdi2;

        }

}

Enum


Enum; birden fazla sabiti bir yapı altında toplamamızı sağlar.

Enum aşağıdaki gibi tanımlanır; 


enum enumAdi 

{

        sabit1,

        sabit2,

        sabit3,

        ...

        sabitn

}


Örnek olarak haftanın günlerini verebiliriz. 

örnek: 


 enum Gunler

{

      Pazartesi,

        Salı,

        Çarşamba,

        Perşembe,

        Cuma,

      Cumartesi,

        Pazar

}

Enum yapısında sabitler 0 ile başlar, yani yukarıda gördüğünüz gibi 0. indexi Parazartesi, 6. indexi Pazardır. 

 IsDefined Metodu


Enum içerisinde bir sabitin tanımlı olup olmadığı bilgisini verir.


 static void Main(string[] args)

{

        if (Gunler.IsDefined(typeof(Gunler), "Salı"))

        {

                Console.WriteLine("Salı günü bulunmaktadır.");

        }

        else

        {

                Console.WriteLine("Salı günü bulunmamaktadır.");

        }

}

enum Gunler

{

        Pazartesi,

        Salı,

        Çarşamba,

        Perşembe,

        Cuma,

        Cumartesi,

        Pazar

}

Enumdaki elemanlara erişim sağlamak


Enum içerisindeki elemanlara "(enumIsmi)elemanNumarası" şeklinde Erişim sağlayabiliriz.

Örnek:


static void Main(string[] args)

{

        int numara;

        Console.WriteLine("Gün numarasını giriniz :");

        numara = Convert.ToInt32(Console.ReadLine());

        Gunler gun;

        gun = (Gunler)numara;

        Console.WriteLine(gun.ToString());

        Console.ReadKey();

}

enum Gunler

{

        Pazartesi,

        Salı,

        Çarşamba,

        Perşembe,

        Cuma,

        Cumartesi,

        Pazar

}

GetName Metodu


Enum içideki bir elamana sayısal değeri aracılığı ile ulaşmamızı sağlar

Örnek:


static void Main(string[] args) 

{

         Console.WriteLine(Enum.GetName(typeof(Gunler), 12));

         Console.ReadKey();

}

enum Gunler

{

          Pazartesi = 3,

            Salı = 9,

          Çarşamba = 33,

          Perşembe = 42,

          Cuma = 12,

          Cumartesi = 12,

          Pazar = 44

}

Çıktı:

Cuma

Not: Enum içerisinde birden fazla aynı değere sahip sabit varsa ilk sabiti döndürür.

GetNames Metodu


Enum içerisindeki elemanları string formatında bir dizinin içerisine saklamamızı sağlar.

Örnek: 

static void Main(string[] args) 

{

        foreach (string gunAdi in Enum.GetNames(typeof(Gunler)))

        {

                Console.WriteLine(gunAdi);

        }

        Console.ReadKey();

}

enum Gunler

{

        Pazartesi = 3,

        Salı = 9,

        Çarşamba = 33,

        Perşembe = 42,

        Cuma = 12,

        Cumartesi = 12,

        Pazar = 44

}


Çıktı:

Pazartesi

Salı

Cumartesi 

Cuma 

Çarşamba 

Perşembe 

Pazar

Yukarıda "Enum.GetNames(typeof(Gunler))" koduyla Gunler enumunu bir dizi haline çevirdik ve foreach ile dizinin içerisindeki bütün değerleri yani günleri ekrana yazdırdık.

GetValues Metodu


Enum içerisindeki elemanların sayısal değerlerini bir dizi içinde saklamamız gerektiği zaman kullanırız.


Örnek:

static void Main(string[] args)

{

        foreach (int deger in Enum.GetValues(typeof(Gunler)))

        {

                Console.WriteLine(deger);

        }

        Console.ReadKey();

}

 enum Gunler

{

        Pazartesi = 3,

        Salı = 9,

        Çarşamba = 33,

        Perşembe = 42,

        Cuma = 12,

        Cumartesi = 12,

        Pazar = 44

}

Çıktı:

3

9

33

42

12

12

44

Parse Metodu


Enum içerisindeki elemanların ismine veya aldığı değere erişmek için kullanırız.

Örnek:


static void Main(string[] args)

{

        Gunler gunAdi = (Gunler)Enum.Parse(typeof(Gunler), "Cumartesi", true);

        Console.WriteLine("Cumartesinin değeri : " + gunAdi.ToString("D"));

        Console.ReadKey();

}

 enum Gunler

{

        Pazartesi = 3,

        Salı = 9,

        Çarşamba = 33,

        Perşembe = 42,

        Cuma = 12,

        Cumartesi = 12,

        Pazar = 44

}

Çıktı :

Cumartesinin değeri : 12 

Boxıng ve Unboxing 


Boxing ; değer türünden bir değişkeni referans türünden bir değişkene atama(aktarma) işlemidir.

Örnek: 


static void Main(string[] args)

{

        int k = 333;

        object box;

         box = k;

        Console.WriteLine(k);

        Console.WriteLine(box);

        Console.ReadKey();

}

Çıktı :

333

333  

• Yukarıda değer türü k değişkenini, referans türü olan box değişkenine atadık.

Unboxing


Unboxing ise boxing'in tam tersidir, yani referans türü bir değişkeni, değer türü bir değişkene atama işlemidir.


Örnek: 


static void Main(string[] args) 

{

         int k;

        object box = 44;

        k = (int)box;

        Console.WriteLine(k);

        Console.WriteLine(box);

        Console.ReadKey();

}

Çıktı :

444

444  

GetType Metodu


Bir değişkenin tipini öğrenmek için GetType metodunu kullanabiliriz.

Örnek:

var isim = "Mehmet Kaya";

var yas = 22;

var geldiMi = false;

Console.WriteLine("İsim tipi : {0}\nyai tipi : {1}\ngeldiMi tipi : {2}",

  isim.GetType().ToString(), yas.GetType().ToString(), geldiMi.GetType().ToString());

Console.ReadKey();

Çıktı :

isim tipi : System.String

yai tipi : System.Int32

geldiMi tipi : System.Boolean

Yukarıda GetType metodunun ürettiği değer type türünden olduğu için ToString metodu ile String türüne dönüştürdük.

Typeof metodu 


Bir değişken tipinin belli bir değişken tipine ait olup olmadığının anlamak için typeof metodunu kullanırız.

Örnek:

var dogruMu = true;

if (dogruMu.GetType() == typeof(byte))

{

    Console.WriteLine("byte");

}

else

{

    Console.WriteLine("Byte değil");

}

Çıktı:

Byte değil











 

Yorumlar