Özellikleri Anlama 2

Merhaba sevgili öğrenciler,

Bu makalede  özellikleri kullanma, sadece okunabilir özellikler, static alanlar ve hatta kucuk projemizi geliştirerek kollesiyon kullanmayı oğreneceğiz.

Daha önce ki makalede de belirtiğimiz gibi özellikle akıllı alanlardır demiştik kısaca. Örnek TextBox sınıfının Text özelliği gibi. Sadece get olan bir özelliklere sadece okur, sadece set olan özelliklere sadece yazılabilir özellik demiştik. Şimdi bunları pekiştiren örneğimizi Console Application projesi olarak yazalım.

Oncelikle Personel clasımızı ve cinsiyet enum değer türünü yazalım..

    enum cinsiyet  { kiz,erkek }
    class Personel
    {
        string ad, soyad;
        cinsiyet cinsiyeti;
        public string Ad
        {
            get { return ad; }
            set { ad = value; }
        }
        public string Soyad
        {
            get { return soyad; }
            set { soyad = value; }
        }
        public string AdSoyad
        {
            get { return ad + " " + soyad; }
        }
    }

Burada AdSoyad sadece oknur bir özelliktir. Bu senaryayo göre ad soyad değerini aynı özellikte set etmek mantıksız olacaktır.

class Program
    {
        static void Main(string[] args)
        {
            Personel eleman = new Personel();
            eleman.Ad = "mürteza";
            eleman.Soyad = "ivedik";
            //recep.AdSoyad = "recep ivedik"; // çalışmaz. çünkü sadece okunur bir özelliktir.
            Console.WriteLine("{0} ",eleman.AdSoyad);
        }
    }

Şimdi artık personel tipinde olan eleman nesnemize değer aktarımı  yapabliriz ve Ad ve soyad özellikleri erişebilir veya herikisi bir de AdSoyad özelliği ile erişebiliriz.

Şimdi senaryonuzu geliştirelim. enum türünde cinsiyet  özelliği ekleyelim. Sadece az sayıda değişmeyen bir tür olduğu için enum türünü seçtim.

enum cinsiyet  { kiz,erkek }

ve Personel Sınıfını özellik ekleyelim.

cinsiyet cinsiyeti;
        public cinsiyet Cinsiyeti
        {
            get { return cinsiyeti; }
            set { cinsiyeti = value; }
        }

Anaprogramızı bunları kullanacak kodlarıda yazdıktan sonra projemiz aşağıdaki gibi olacaktır.

namespace Özellikler2
{
    enum cinsiyet  { kiz,erkek }
    class Personel
    {
        string ad, soyad;
        cinsiyet cinsiyeti;
        public cinsiyet Cinsiyeti
        {
            get { return cinsiyeti; }
            set { cinsiyeti = value; }
        }
       
        public string Ad
        {
            get { return ad; }
            set { ad = value; }
        }
        public string Soyad
        {
            get { return soyad; }
            set { soyad = value; }
        }
        public string AdSoyad
        {
            get { return ad + " " + soyad; }
        }

    }
  
    class Program
    {
        static void Main(string[] args)
        {
            Personel eleman = new Personel();
            eleman.Ad = "mürteza";
            eleman.Soyad = "ivedik";
            Console.WriteLine("{0} cinsiyeti {1} ", eleman.AdSoyad,eleman.Cinsiyeti);
        }
    }
}

Şimdi eski konularıda gördüğümüz  static bir alanı burada kullanmak istiyorum. Static alanlar değer türleri gibi işlem görürler, ve belleğin stack bölgesinde tutulurlar.

        public static int nufus;
        public Personel()
        {
            nufus++;
        }

Personel sınıfımıza satatic bir alan ekledik, bunu kurucu yöntemin içinde 1 arttırarak kullandık. nufus static alanı personel sınfının örnek oluşturma sayısını tutar. Çünkü her new Personel(); satırında  nufus++ satırı işlemektedir. Burada static deyimi silersek, nufus bilgisinin hep sıfırlandığını görürüz. Zaten bu nedenle static bir alan tanımladım.. Bu değeri yazdıran kod satırnı main yöntemine eklersek, programın son hali aşağıdaki gibi olacaktır.

using System;

namespace Özellikler2
{

    enum cinsiyet { kiz, erkek }
    class Personel
    {
        public static int nufus;
        public Personel()
        {
            nufus++;
        }
        string ad, soyad;
        cinsiyet cinsiyeti;
        public cinsiyet Cinsiyeti
        {
            get { return cinsiyeti; }
            set { cinsiyeti = value; }
        }

        public string Ad
        {
            get { return ad; }
            set { ad = value; }
        }
        public string Soyad
        {
            get { return soyad; }
            set { soyad = value; }
        }
        public string AdSoyad
        {
            get { return ad + " " + soyad; }
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Personel eleman = new Personel();
            Personel eleman2 = new Personel();
            Personel eleman3 = new Personel();
            eleman.Ad = "mürteza";
            eleman.Soyad = "ivedik";
            Console.WriteLine("{0} cinsiyeti {1}, nufus :{2} ", eleman.AdSoyad, eleman.Cinsiyeti, Personel.nufus);
        }
    }
}

Ekran çıktısı

mürteza ivedik cinsiyeti kiz, nufus :3
Press any key to continue . . .

Şimdi ben projemizi biraz daha geliştirmek istiyorum. 18-19 kişil bir takim oluşturmak istiyorum. Personel türünde bir ArrayList (kolleksiyon) oluşturalım. Bir döngü içinde personel nesnesi oluşturalım  ve kolleksiyonumuza ekleyelim. Foreach deyimiyle bu kolleksiyondaki bütün elemenlara erişerek yazdıralım.. ArrayList başka bir isim alanında olduğu için

using System.Collections; projemi ekledim.

static void Main(string[] args)
        { 
             ArrayList bizimTakim = new ArrayList();
           //nufusu attırmak için isimsiz 18 kişi ekleyelim.
            for (int i = 0; i < 18; i++)
            {
                bizimTakim.Add(new Personel());
            }

            Personel eleman = new Personel();

            bizimTakim.Add(eleman);
            eleman.Ad = "mürteza";
            eleman.Soyad = "ivedik";

            foreach (Personel  item in bizimTakim)
            {
                Console.WriteLine("{0} cinsiyeti {1}, nufus :{2} ", item.AdSoyad, item.Cinsiyeti, Personel.nufus);
            }
        }

Arraylist kullanma, bir kolleksiyondaki değerleri erişme, foreach deyimini kullanmayı tekrar etmiş olduk. Ben bir başka List<> generic sınıfnı kullanarak yine bizim takıma değer girmek istiyorum. Amacım List<> sıınıfı kullanımını göstermek. Burada  lambada(=>) deyimini kullanarak foreach deyimi ile bizimTakim kolleksiyonuna eklemeler yaptım. List<> deyimi için using System.Collections.Generic; satırınıekleyerek , projeme  Collection.Generic isim alanını projeme dahil ettim. Lambada deyimiyle ilgili daha geniş  bilgi için bu makaleye başvurabilirsiniz. 

class Program
    {
        static void Main(string[] args)
        {
            ArrayList bizimTakim = new ArrayList();
            for (int i = 0; i < 18; i++)
            {
                bizimTakim.Add(new Personel());
            }
            new List<Personel> {
                new Personel { Ad="kemal", Cinsiyeti=cinsiyet.erkek, Soyad="balli"},
                new Personel { Ad="mustafa", Soyad="dal", Cinsiyeti=cinsiyet.erkek },
                new Personel {Ad="bennu", Soyad="baner", Cinsiyeti=cinsiyet.kiz}
            }.ForEach(t => bizimTakim.Add(t));

            Personel eleman = new Personel();
            bizimTakim.Add(eleman);
            eleman.Ad = "mürteza";
            eleman.Soyad = "ivedik";

            foreach (Personel  item in bizimTakim)
            {
                Console.WriteLine("{0} cinsiyeti {1}, nufus :{2} ", item.AdSoyad, item.Cinsiyeti, Personel.nufus);
            }
        }
    }

Bir sonraki makalemizede görüşmek üzere hoşçakalın. Bu makalenin sonuna flickr.com adresinden seçtiğim bir resmi  koymak istiyorum.

 

Add comment

The file '/Custom/Widgets/Calendar/widget.cshtml' does not exist.The file '/Custom/Widgets/Category list/widget.cshtml' does not exist.The file '/Custom/Widgets/Tag cloud/widget.cshtml' does not exist.The file '/Custom/Widgets/Page List/widget.cshtml' does not exist.The file '/Custom/Widgets/Month List/widget.cshtml' does not exist.