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.