Delegate, Lambada operatörü ve isimsiz(Anonymous) methodlar

Temsilciler bir veya birden fazla methodu referans gosteren tiplerdir.(type). Temsilciler metodu çalışma zamanında işaret edebilir, parametre yollayabilir, geri dönüşdeğerlerinide verebilriler ve hangi method veya methodların  çağrılacağını karar verebilirler. Biz tanımlama yaparken method ismi yerine bir kod blogu yazabiliriz. Bu kod bloklarına isimsiz(Anonymous) methodlar denir. Lambada deyimiyle de bu bir methodun referansını bir temsilciye aktarabiliriz.

 

using System;

namespace Temsilciler
{
    delegate int  temsilci(int a);
    delegate int temcilci2(int a, int b);
    delegate void temcilci3();
    class Program
    {
        
        static void Main(string[] args)
        {
            Hesap hesapla = new Hesap(5);
            temsilci bul = new temsilci(hesapla.karesi);
           // hesapla.Yaz(bul);
            bul += hesapla.kupu; //karesine bulan method eklenir. Fakat 25 değerinin üzerine 125 değeri yazıldığı için 25 rakamını yazmaz.

            hesapla.Yaz(bul);

            bul = x => (x * 8);//lambada deyimini kullandım. sonuc /40
            hesapla.Yaz(bul);


            temsilci bul1 = new temsilci(x=>(x*7));// ikinci yeni bir temsilci sonuc 35
            hesapla.Yaz(bul1);

            temcilci2 tem = (x, y) => x + y * 10;
            hesapla.Yaz(tem);//burada x=5 ve y=6 değerlerini methoddan alarak lambada deyimiyle kullanmayım.

            temcilci3 dene = new temcilci3(delegate() { Console.WriteLine("isimsiz method"); });
            dene += delegate() { Console.WriteLine("isimsiz method 2"); };//temsilcime yeni bir isimsiz (Anonymous) method ekledim.
            dene();
        }
    }

    class Hesap
    { 

        public Hesap(int sayi)
        {
            this.sayi = sayi;
        }
        public  int sayi;
       

        public int  karesi(int a)
        {
            Console.WriteLine("karesi çalıştı");
            return a * a;
        }
        public int kupu(int a)
        {
            Console.WriteLine("Kupu çalıştı:");
            return a * a * a;
        }

        //parametre bir metod;
        public void Yaz(temsilci bulunacak)
        {
            Console.WriteLine(bulunacak(sayi));
        }

        public void Yaz(temcilci2 bulunacak)
        {
            Console.WriteLine(bulunacak(5,6));
        }

    }
}

Sanırım tüm konuyu anlatan güzel bir örnek. 

 

Select Deyimi Sorguları

SELECT DEYİMİNE ÖRNEKLER

SELECT * FROM Ogrenciler
-- yukarıdaki kod ile tüm kolonlar listelenir
-- iki tire işareti remark anlamına gelir açıklama satırları bu şekilde girilir

SELECT Adi, Soyadi FROM Ogrenciler
SELECT Soyadi, Adi  FROM Ogrenciler
-- Yukarıda ise öğrenciler tablosundan adı ve soyadı fieldları alınır.
SELECT * FROM Ogrenciler WHERE Adi = 'Burcu'
--Sorguya koşul yazmak istersem WHERE ifadesini kullanırım

--varchar tanımlı alanlar için ve tarih tanımlı alanlar tek tırnak içinde içinde sorgulanır.integer yani tamsayılar ise ' olamdan sorgulanır.
--Sorgular f5 tuşu ya da Execute butonu ile çalışır.
SELECT * FROM Ogrenciler  WHERE Ogrencinumarasi = 60202009
SELECT * FROM Ogrenciler  WHERE Adi LIKE '%li%'
--Yukarıdaki sorgu adında 'li' harf öbeği geçen kayırları listeler

SELECT * FROM Ogrenciler  WHERE Adi LIKE '_li'
SELECT * FROM Ogrenciler  WHERE Adi LIKE '_li%'
--Yukarıdaki kod örneğinde ise ilkinde ali,eli gibi sonuçlar dönebilir yani ilk harf ne olursa olsun önemli değil ama 3 harfli ve 2. 3. harfleri li olan kayıtlar listelenir.% işareti ise sağdan kaç harf olucağını önemsemez.

SELECT * FROM Ogrenciler  WHERE Adi LIKE '__li%'
-- Yukarıdaki sorgu içerisinde li harf öbeği olsun.
-- li nin solunda 2 karakter olsun
--sağında ne olup olmadığı çok önemli değil

SELECT * FROM Ogrenciler  WHERE Adi LIKE '__li'
SELECT COUNT(*) FROM Ogrenciler
--Count yani Adet verir

SELECT COUNT(*) FROM Ogrenciler   WHERE OgrenciNumarasi IS NOT NULL
SELECT COUNT(*) FROM Ogrenciler   WHERE OgrenciNumarasi IS NULL
--Yukarıdaki örnekte ise ogrennciNumarasi alani null yani boş olmayan kayıtları getirir.

SELECT COUNT(*) FROM Ogrenciler    WHERE Adi LIKE 'A%'
--Adı A ile başlayan kayıtlar döner.

SELECT * FROM Ogrenciler    WHERE Adi='alper'
SELECT * FROM Ogrenciler    WHERE Cinsiyeti=0

SELECT COUNT(Cinsiyeti) AS Adet,Cinsiyeti  FROM Ogrenciler
GROUP BY Cinsiyeti
--field adını değiştirmek için As kullanırım.
--Count komutu ile field ın adı kaybolur
--as ile isimlendirmekte fayda var.

SELECT * FROM Ogrenciler ORDER BY OgrenciNumarasi
-- Order by Sıralamayı sağlar
--order'da hiç birşey yazmazsak default olan ASC dir
SELECT * FROM Ogrenciler
ORDER BY OgrenciNumarasi ASC

SELECT * FROM Ogrenciler
ORDER BY OgrenciNumarasi DESC
-- Order by desc tersten Sıralamayı sağlar

SELECT * FROM Ogrenciler
ORDER BY Adi , Soyadi
--iki field a göre sıralama yapabilmek mümkündür.

SELECT Adi ,COUNT(Adi)  AS Adet FROM Ogrenciler
GROUP BY Adi

-- JOIN : iki veya daha fazla tablodan
-- ilişkisel veri sorgulamya yatar
SELECT Ogrenciler.Adi , Ogrenciler.Soyadi , City.City FROM Ogrenciler INNER JOIN City ON City.CityId =Ogrenciler.CityId
-- Ogrencilerin CityID sini göstermek işime yaramaz
-- fakat İl bilgisi işime yarar.
-- amacım iki tablo arasında ilişki tanımlayarak
--veriyi getirmek.
-- iki tarafta da aynı olan eşleşen kayıtları getirir.

SELECT * FROM Ogrenciler  ORDER BY OgrenciNumarasi
--Order by sıralamayı sağlar
--select * from Ogrenciler  order by OgrenciNumarasi  desc
--Order by dan sonra ASC ve DESC olmak üzere 2 seçeneğim var
--Default olan ASC : Artan sırada dır. DESC azalan

SELECT * FROM Ogrenciler  ORDER BY OgrenciNumarasi ASC

SELECT * FROM Ogrenciler WHERE OgrenciNumarasi=60702004
--Sorgu kriteri yazmak için WHERE ifadesi kullanılır.

SELECT * FROM Ogrenciler WHERE OgrenciNumarasi >=60702004 AND OgrenciNumarasi <= 60702020
SELECT * FROM Ogrenciler WHERE OgrenciNumarasi BETWEEN 60702004 AND 60702020
--Between 2 değer arasını sorgular

SELECT * FROM Ogrenciler  WHERE Adi = 'Oytun'
SELECT * FROM Ogrenciler  WHERE Adi LIKE 'Al%'
-- Al ile başlayan bütün kayıtları göster

--% işareti joker anlamına gelir
SELECT * FROM Ogrenciler  WHERE Adi LIKE 'G%'
SELECT * FROM Ogrenciler  WHERE Adi LIKE '%me%'

--içirisinde ME geçen tüm adları listeler
SELECT * FROM Ogrenciler  WHERE Adi LIKE '_li'
SELECT * FROM Ogrenciler  WHERE Adi LIKE '__li'
SELECT * FROM Ogrenciler  WHERE Adi LIKE '__li_'

SELECT COUNT(*) FROM Ogrenciler
--Count toplam adeti almaya yarar 32

SELECT COUNT(*) FROM Ogrenciler WHERE Cinsiyeti= 0
--Bayanların sayısını bulmamı sağladı.

SELECT Sehir, COUNT(Sehir) AS ToplamAdet FROM Ogrenciler
GROUP BY Sehir
ORDER BY COUNT(Sehir) DESC

--as ile kolon adını değiştirmeye yarar
--count ile kolon adı kaybolduğunda
--'as' kullanmak önerilir.

SELECT Cinsiyeti, COUNT(Cinsiyeti) AS ToplamAdet FROM Ogrenciler
GROUP BY Cinsiyeti
ORDER BY COUNT(Cinsiyeti) DESC
--group by gruplama yapmaya yarar

SELECT Ogrenciler.Adi,
Ogrenciler.Soyadi,
Ogrenciler.OgrenciNumarasi ,
city.CityName
FROM Ogrenciler
INNER JOIN City ON City.CityId = Ogrenciler.Sehir

--bu örnekte ise şehirin kodu city tablosundaki id
--ile bağlanıp o id ye karşılık gelen değer alnmıştır.

SELECT * FROM Ogrenciler
WHERE Sehir IN (34,35,6)
--sehir id leri 34,35,6 olan iller çekilir.

SELECT * FROM Ogrenciler
WHERE Sehir NOT IN (34,35,6)
-- in içinde içeren kayıtları listeler

Alıntıdır.

z

Şifreleme teknikleri; Convert.ToBase64String ve SHA1, SHA256 vb...

Merhaba arkadaşlar, toBaseString ve diğer algoritmaların arasındaki fark nedir? Hangisinin kullanmalıyız bunları kısaca anlatacağım.

ToBase64String yöntemi Convert sınıfını bir metodudur. Bu binary olarak kodlama yaparak verinin içeriğini de��iştirir. Bu kodlanmış veriyi Convert.FromBase64String(şifrlenmişVeri) metodunu kullanarak orjinal veriyi ulaşabiliriz. 

Bir veriyi kodlamak yerine şifleyebiliriz. Yalnız bu şifrelenmiş bilgilerin orjinalini geri döndürmek imkansız olmasada çok zordur. Bu algoritmalar şunlardır. Bu algorimaların içeriğini msdn den erişebilirsiniz.

    System.Security.Cryptography.KeyedHashAlgorithm
    System.Security.Cryptography.MD5
    System.Security.Cryptography.RIPEMD160
    System.Security.Cryptography.SHA1
    System.Security.Cryptography.SHA256
    System.Security.Cryptography.SHA384
    System.Security.Cryptography.SHA512

public string Sifrele(string data)
        {
            byte[] tempDizi = System.Text.Encoding.UTF8.GetBytes(data);//binary türüne çevir.
            return System.Convert.ToBase64String(tempDizi);
        }

        public string SifreyiCoz(string data)
        {
           byte[] tempDizi = System.Convert.FromBase64String(data);
           return  System.Text.Encoding.UTF8.GetString(tempDizi);
        }

Algoritma türleri System.Security.Cryptography.HashAlgorithm  classında mevcuttur.  Bunlar absract bir sınıf olduğu için, bu sınıfdan kalıtım alan bir sınıfdan başlatmak gerekir.

SHA1 sifrele = new SHA1CryptoServiceProvider();
            string SifrelenecekVeri = "Merhaba";
            string Sifrelenmis = Convert.ToBase64String(sifrele.ComputeHash(Encoding.UTF8.GetBytes(SifrelenecekVeri)));

 

ProtectedData.Protect(), ProtectedData.Unprotect() gibi yöntemler kullanılarak da şifreleme yapılabilir. Burada bir byte dizisi ve DataProtectionScope.CurrentUser veya DataProtectionScope.LocalMachine enum türünü kulanılark şifrleme yapılabilir.

byte[] source= UnicodeEncoding.ASCII.GetBytes("erkan Yürek");
            byte[] sifreli=ProtectedData.Protect(source, new byte[] {2,3,4},DataProtectionScope.CurrentUser);
            byte[] sifresiz=ProtectedData.Unprotect(sifreli,new byte[] {2,3,4},DataProtectionScope.LocalMachine);

            string cozulmemis = UnicodeEncoding.ASCII.GetString(sifreli);
            
            string cozulmus=UnicodeEncoding.ASCII.GetString(sifresiz);
            Console.WriteLine(cozulmemis);
            Console.WriteLine(cozulmus);

Bu ProtectedData ile ilgili Burak Selim Şenyurtun ilgili bir yazısı buradan da erişebilirsiniz.

Bir sonraki makalede görüşmek üzere esenkalınız.

 

Temsilciler 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace temsilciler
{
    class Program
    {
         static void Main(string[] args)
        {
            string islem=boyama();
            Console.WriteLine(islem);
        }

        static string boyama() //bir method
        {
            return "Boyama yapıldı";
        }
    }
}

Burada islem alanı bir method unadresinini tutmaktadır. Bu adres çalışma anında belirlenir.

Şimdi aşağıdaki gibi program parçasını daha güçlü hale getirerek yazalım. 1

paragraf boşluk bırak.

using System;

namespace temsilciler
{
    class Program
    {

        static void Main(string[] args)
        {
            Araba arabam1=new Araba();
           boyama(arabam1); //çağrılıyor.
        }

        static void boyama(Araba arabam) //bir method
        {
            Console.WriteLine(arabam.ToString() + "Boyama yapıldı");
        }

        static void cilalama(Araba arabam)
        {
            Console.WriteLine(arabam.ToString() + "cilalama işi tamam");
        }

        static void hizTesti(Araba arabam)
        {
            Console.WriteLine(arabam.ToString() + "Hiz Testi yapıldı");
        }
    }

    class Araba
    {
        public override string ToString()
        {
            return "09890890 nolu araba ";
        }
    }

}

Şimdi bu kod üzerinde düzenlemeler yapalım..

using System;

namespace temsilciler
{
    class Program
    {
        delegate void islemler(Araba arabam);
         //delagate
        static void Main(string[] args)
        {
            Araba arabam1=new Araba();
            //string islem=boyama(arabam1);
            islemler islem=new islemler(boyama);//moethodları yazarken bir değer gibi düşünldüğünden parantez yazılmaz.
            islem+=cilalama;
            islem+=hizTesti;
            islem(arabam1);//çağrılıyor
            Console.WriteLine("\r\n");
            islem-=hizTesti;  //2. çağırma işleminde hızTesti yöntemini çıkardık.
            islem(arabam1); //çağrılıyor.
        }

        static void boyama(Araba arabam) //bir method
        {
            Console.WriteLine(arabam.ToString() + "Boyama yapıldı");
        }

        static void cilalama(Araba arabam)
        {
            Console.WriteLine(arabam.ToString() + "cilalama işi tamam");
        }

        static void hizTesti(Araba arabam)
        {
            Console.WriteLine(arabam.ToString() + "Hiz Testi yapıldı");
        }
    }

    class Araba
    {
        public override string ToString()
        {
            return "09890890 nolu araba ";
        }
    }

}

Burada dikkat edilmesi gereken kurallara ve notları yazalım..

Temsillerin temsil ettikleri methodlar aynı türde ve aynı parametrelere ship olmalıdır.

Temsilcilere eklenen methodlar eklenme sırasına göre çalışırlar.

Temsilcilere method eklenirken parantez yazılmaz. islem+=cilalama; gibi

Temsilci nesnesini tanımalmak için new Islemler(method_Adi) gibi tanımlama yapmak gerekir. Burada Islemler temsilcisinin delegate türünde olduğunu ve  imzasını daha önceden belirtmek gerekir.
delegate void islemler(Araba arabam); satırında olduğu gibi. parametre ve geri dönüş değeri temsilcinin imzasıdır diyebiliriz.
 

 d

 d

Workflow Foundation kurslarını buradan takip edebilirsiniz.

 

Türkiye’de ki, .NET konusunda bilgi paylaşan en aktif kişilerin başında gelen Burak Selim Şenyurt(MVP) hazırladığı Workflow Foundation görsel dersleri ile Workflow Foundation nedir, ne değildir,neler yapabiliyoruz,nasıl yapabiliyoruz gibi kavramları anlatıyor. Başlangıç ya da ileri seviye bilgisi olan herkese hitap ettiğini düşünüyorum. 

  1. Workflow Foundation Öğreniyorum – Ders 0 – Hello World
  2. Workflow Foundation Öğreniyorum – Ders 1 – Biraz Daha Bileşen
  3. Workflow Foundation Öğreniyorum – Ders 2 – Kodla Başbaşayız
  4. Workflow Foundation Öğreniyorum – Ders 3 – Yeni Bir Yüz – Flowchart
  5. Workflow Foundation Öğreniyorum – Ders 4 – Flowchart için Ek İşlemler
  6. Workflow Foundation Öğreniyorum – Ders 5 – Argument Kavramı ile Tanışalım
  7. Workflow Foundation Öğreniyorum – Ders 6 – Expression Activities
  8. Workflow Foundation Öğreniyorum – Ders 7 – Homework
  9. Workflow Foundation Öğreniyorum – Ders 8 – Exception Handling

Büyük boyutlu resmini  buradan indirebilirsiniz.

SingleOrDefault ve FirstOrDefault Farkı

Linq kullanırken tek bir eleman çektiğimiz zaman hem first hemde single olması kafa karıştırıcı değil mi ? Aslında buna verilen cevap “birisi ilk eleman birisi tek eleman” şeklinde olur. Aslında bu tanım yeterince açıklayıcı ama ben biraz daha detaya inerek anlatmak istedim.

Öncelikle bilmeniz gereken şu :

Single : Tek bir eleman döndürdüğünden emin olduğunuz sorgular için kullanın, eğer sorgu birden fazla eleman döndürecek olursa hata oluşacaktır.

SingleOrDefault : Hiç eleman dönmez ise generic tipin varsayılan değerini ya da nothing değeri dönecektir. Yine birden fazla değer varsa hata verir.

First : Dönen sorgu sonucunun ilk elemanını döndürecektir. Bu tek bir string ise char dizisi olarak kabul edilip ilk karakteri alınır.

FirstOrDefault : Hiç eleman dönmez ise generic tipin varsayılan değerini ya da nothing değeri dönecektir.

biraz daha detaya inecek olursak

first fonksiyonu çalışırken şu adımları izler:

Tampon bir list , sonuç kümesi (IEnumerable) ile doldurulur

Tampon listenin Nothing olup olmadığına bakılır

 

Nothing değil ise :Tampon listenin ilk elemanı 0 index numarası çağırılarak gönderilir

Nothing ise : Bu küme list’e aktarılamıyordur bu yüzden bir IEnumerator nesnesine gönderilir ve bir sonraki kayıt alınmaya çalışılır.

Eğer hala bir şey döndürülmemiş ise first için bir kayıt yok hatası,FirstOrDefault için ise nothing döndürülür.

birde single a bakalım :

Tampon bir list , sonuç kümesi (IEnumerable) ile doldurulur

Tampon listenin Nothing olup olmadığına bakılır

Nothing değil ise Listenin eleman sayısına bakılır :

0 ise eleman yok  hatası.

1 ise listenin 0 index numaralı elemanı döndürülür

Nothing ise Bu küme list’e aktarılamıyordur bu yüzden bir IEnumerator nesnesine gönderilir

bir sonraki kayıt alınamıyorsa kayıt yok hatası döndürülür

bir sonraki kayıt tampon bir değişkene alınır

bir sonraki kayıt alınamıyorsa alınan tampon sonuç olarak döndürülür

Eğer hala bir şey döndürülmemiş ise first için bir kayıt yok hatası,SingleOrDefault için ise nothing döndürülür.

görüldüğü üzere single’ın performans için bir faydası yok, hatta fazladan bir kaç karşılaştıma yapılmakta. Eğer tek kayıt dönmesi gereken bir sorgudan birden fazla dönmesini yakalamak istediğiniz bir durum olursa kolaylıkla try bloğu içerisind tanımlayabilirsiniz.Ama birden fazla da dönse ilk kayıt sizin için yeterli oluyorsa First / FirstOrDefault kullanın.

Not: http://www.cihanyakar.com/?p=213  alıntıdır.

Özellik ve arabirimleri anlama3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ConsoleApplication22
{
    class Program
    {
        static void Main(string[] args)
        {
            //ArrayList sepet=new ArrayList(); //object türünden bir kolleksiyon
            List<Urun> sepet = new List<Urun>(); //Urun turunde generic bir collection olan List i kullandık.
            Urun kalem = new Urun();
            Urun silgi = new Urun();
            Urun defter = new Urun();
            Urun kitap = new Urun();
            kalem.Ad = "çıtçıt"; kalem.Fiyat = 12.55M; kalem.adet = 5;
            silgi.Ad = "kokulu"; silgi.Fiyat = 15.2M; silgi.adet = 10;
            defter.Ad= "çizgili"; defter.Fiyat = 9.54M;
            kitap.Ad = "Roman"; kitap.Fiyat = 25.99M;
            sepet.Add(kalem); sepet.Add(silgi); sepet.Add(defter); sepet.Add(kitap);
            Console.WriteLine("Urun Adı:\tUrun Fiyat:\tUrun Adet:\t Kdvli Fiyat\tUrunSeriNo:\t\t");
            Console.WriteLine("--------\t--------\t-------\t\t------\t\t-----\t\t");
            foreach (Urun  item in sepet)
            {
                //Urun urunum = (Urun)item;//List türünde kolleksiyon kulladığımız için Unboxing işlemine gerek kalmadı.
                Console.WriteLine("{0}\t\t {1}\t {2}\t {3}\t {4}\t", item.Ad, item.Fiyat, item.adet, item.KdvHesapla().ToString(), item.SeriNo);
            }
        }
        interface IUrun
        {
             string Ad { get; set; }
             decimal Fiyat { get; set; }
             decimal KdvHesapla();
        }
        class Urun : IUrun
        {
            Guid seriNo;

            public Guid SeriNo
            {
                get { return seriNo; }//kimsenin değiştirmesin diye sadece okunur özellik yaptık.
            }
            public Urun()
            {
                seriNo = Guid.NewGuid();
            }
            string _ad;
            public int adet = 1;
            public string Ad
            {
                get
                {
                    return _ad;
                }
                set
                {
                    _ad = value;
                }
            }
            decimal _fiyat;
            public decimal Fiyat
            {
                get
                {
                    return _fiyat;
                }
                set
                {
                    _fiyat = value;
                }
            }
            public decimal KdvHesapla()
            {
                return _fiyat * 1.18M*adet;
            }
        }
        enum Renkler
        {
            Mavi,Kırmızı,Yeşil,Siyah,Gri,Turuncu,Mor,Beyaz
        }
    }
    
}

Lcd veya Led TV için önerilen boyut ve oturma mesafaleri

BOYUT VE İDEAL İZLEME MESAFESİ

32" ------->1,2-2,0M

40" ------->1,5-2,5M

46" ------->1,7-2,9M

55" ------->2,1-3,4M

65" ------->2,4-4.0 M

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

 

Dünya kadınlar günü

Tüm kadınların, dünya Kadınlar günün kutlarım, İyiki varsınız..

 

 

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.