More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  Çağdaş DAVULCUProfileFriendsBlogMore Tools Explore the Spaces community

Çağdaş DAVULCU

To arrive at the simple is difficult — Rashid Elisha
No list items have been added yet.
En çok ziyaret ettiğim siteler
July 13

Konuşulan konu ProjeABC'nin İlk Ürünü: BilBakalimKac

"Bil Bakalım Kaç" projesinin kodları yayınlandı. İncelemenizi tavsiye ederim.

Alıntı

ProjeABC'nin İlk Ürünü: BilBakalimKac
ProjeABC'nin ilk uygulaması "Bil Bakalım Kaç?" tamamlandı...

Chip Online'daki "Tek Kişilik Yazılımevi" okuyucularıyla analiz aşamasını geliştirdiğimiz projenin tasarım ve kodlama aşamasını tamamladım ve kitapçığı da hazırlayarak aşağıdaki linkten paylaşıma açtım.
 
Projeyle ilgili gelişmeleri aşağıdaki linklerden takip edebilirsiniz.
 

Konuşulan konu Yazılım Geliştirme Projelerinin ABCsi: ProjeABC

Kadir hocamın girişimine hep birlikte destek olalım. Türkiye'de benzeri olmayan bir etkinlik. Yazılım alanında tecrübe kazanmak isteyenlerin kaçırmaması gereken bir fırsat.

Kadir Çamoğlu'na teşekkürler...

Alıntı

Yazılım Geliştirme Projelerinin ABCsi: ProjeABC
Bir programlama dili öğrendiniz...
Değişkenleri, döngüleri, karar yapılarını biliyorsunuz...
Belki biraz da masa üstü uygulama programlamayı biliyorsunuz...
Biraz da veritabanlarından anlıyorsunuz...
Peki ama bu bölük pörçük bilgileri birleştirerek uygulama geliştirebiliyor musunuz?

İşte şu anda Türkiye'de benim tespit ettiğim en büyük eksiklerden bir tanesi bu: Yazılım geliştirmeye bütünsel bakış!
Yazılım geliştirme bilgi ve becerilerinin tamamını kullanarak bir problemi başından sonuna kadar çözebilmek, bir yazılım çözümü geliştirebilmek.

Bu genel bir sorun. İster okulunu okuyun, ister kursuna gidin, ister kitaplardan ya da internetten öğrenin bu eksikliği hissediyor olabilirsiniz. Kendinizi suçlamayın. Parçaları nasıl birleştireceğiniz ayrı bir eğitim konusudur ki çoğunlukla bu açık stajlarla kapanmaya çalışılmaktadır.

Benim kişisel amaçlarımdan biri de yazılım dünyasına girişteki bu zorluğu aşmaları konusunda desteğe ihtiyacı olanlara ufak ta olsa bir katkıda bulunabilmektir. İşte bu nedenle ilk olarak Chip Online'da "Tek Kişilik Yazılımevi" blogunu yazmaya başladım. Bu blogdaki amaç yazılıma bütünsel bakışın kodlama dışında kalan mühendislik adımları hakkında bilgiler vermekti. Ama bir de bu işin uygulama tarafı var, yani kodlama. İşte bu konduaki eksikliği de ProjeABC ile gidermeyi düşünüyorum.
June 26

.Net Platformu ve Framework

Herkesin kullandığı bir ifade olan “Framework”, yazılımcılar için farklı anlamlar taşıyabilir. Bu bölümde “Framework” kavramını, neden “Framework”e ihtiyaç duyulduğunu ve “Framework”ün nelere çözümler getirdiği üzerine açıklamalar bulunacaktır. Bunun yanısıra 2000 yılından beri herkesi etkisi altına alan “.Net Framework”, “.Net Framework”ün tarihsel gelişimi, “.Net Framework 3.5” yenilikleri, programlama dilleri ve “Visual Studio 2008” yeniliklerinden söz edilecektir. Bölümü okumayı bitirdiğinizde “Framework Kavramı Nedir?” ve “.Net Framework’ün Özellikleri Nedir?” sorularına cevap verebileceksiniz.

Framework Kavramı
“Framework” kavramının karşılık gelebileceği bir sürü anlam olduğundan, söz edilen konunun “Yazılım Çatısı(Software Framework)” olduğunu bilmeniz gerekmektedir. “Yazılım Çatısı(Software Framework)” kavramı tam olarak : “Yazılım sistemleri ya da alt sistemleri için tekrar kullanılabilir bir alt yapı tasarımı” anlamına gelmektedir. “Framework” geliştirmenin amacı ise tekrar kullanılabilir ve genişletilebilir bir alt yapı üzerinde tüm teknolojileri çalıştırabilmektir. “Framework”ler böyle bir zorunluluk olmamasına rağmen genellikle “Nesne Yönelimli Programlama” mantığıyla geliştirilmiştirler ve yazılımcılara uygulamalarını geliştirirken yardımcı olan yapılardır. Aynı zamanda geliştirilen “Framework“ler API(Application Programming Interface) adı verilen işletim sisteminin kullandığı nesnelere kolayca erişimi sağlayan yapılar arasındadırlar. Dünyada bu amaçlara hizmet etmek için geliştirilmiş bir sürü ”Framework” bulunmaktadır:

Java Native Interface(JNI): Java Virtual Machine(JVM) üzerinde “Native Uygulamalar” tarafından Java kodları çalıştırmaya yarayan bir alt yapı.

Spring: Java platformu için açık kaynaklı uygulama altyapısı.

Symphony Framework: PHP platformu için geliştirlen uygulama alt yapısı olan Symphony, en popüler “Framework”ler arasında yer almaktadır.

“Framework”, uzun yıllardır üzerinde çalışmalar yapılan “Yazılım Fabrikası(Software Factory)” kavramının en önemli ürünüdür. Amaç ise değişen koşullara çabuk uyum sağlayan yazılımların yanısıra zaman ve maliyet parametreleri açısından minimum değerleri yakalamaktır. Bunun en güzel örneği de “.Net Framework” versiyonlarıdır. “.Net Framework” dünyanın en başarılı “Framework”leri arasında yer almaktadır. Yazılımcılara yazılım geliştirmek için süper bir altyapı sağlayan “.Net Framework Class Library” ve diğer “Framework”lerden bir farkı daha olan “CLR(Comman Language Runtime)”, uygulamaları daha kolay ve çabuk geliştirilebilir kılmaktadır. Bu konu ile ilgili detaylara “.Net Framework Tarihçesi” başlığı altında değinilecektir.

.Net Framework Tarihçesi
“.Net Framework” özellikleri:

Birlikte Çalışabilirlik(Interoperability): “.Net” uygulamaları diğer geliştirilmiş uygulamalarla(“.Net” platformunda yazılıp yazılmadığı önemsenmeksizin) birlikte çalışabilmesi.

Ortak Çalışma Zamanı Motoru(Common Runtime Engine): “.Net Framework” üzerinde kullanılan programlama dilleri “Ara Dil(Intermediate Language)” bir dile derlenir ki bu “Microsoft Intermediate Language(MSIL)” olarak ta bilinir. Çalışma esnasında “Jusy-In-Time(JIT)” derleyicisi devreye girerek “MSIL” olarak bulunan dosyayı “Makine Dili(Machine Code)“ne derler ve çalıştırma işlemi yapılır. Bu şekilde yapılan çalıştırma işlemine “Ortak Dil Altyapısı(Common Languague Infrastructure)” denir ve bu özellik Microsoft tarafında “Ortak Dil Çalışma Zamanı(Common Language Runtime)” olarak uygulanmıştır.

Dil Bağımsızlığı(Language Independence): Microsoft “Dil bağımsızlığı“nı “CTS(Common Type System)” adı verilen bir yöntem ile çözmüştür. Bu özelliği bütün veri tipleri ve programlama yapıları göz önünde bulundurularak CLR destekli bir çözüm getirilmiş ve ortaya aynı alt yapı ile çalışan fakat dil bazında değişiklikler gösteren “.Net Programlama Dilleri” çıkmıştır.

Temel Sınıf Kütüphanesi(Base Class Library): Yazılım geliştiricilerin üzerinde yoğunlaştıkları yazılımları daha kolay bir şekilde geliştirebilmeleri için sunulan bir kütüphanedir. Bir yandan da API(Application Programming Interface)’lerin enkapsüle edilmiş halidir.

Kolaylaştırılmış Dağıtım(Simplified Deploy): Yüklenmeye çalışılan yazılım ile ilgili arttırılmış kolaylık ve baştan tasarlanan dağıtım sistemi ile geçmişte yüklenen yazılımlara zarar vermeden, düzgün adresleme yapılarak yükleme yapılır.
Güvenlik(Security): Uygulamaların zayıf yönleri ortaya konarak çözümler getirilmiştir. Örneğin: “Buffer Overrun” adı verilen hatalara karşı, “.Net Framework” tarafından bütün uygulamalar için ortak güvenlik desteği sağlamaktadır.

Taşınabilirlik(Portability): “.Net Framework” çeşitli ortamlarda çalışabilir. Windows, Windows Ce, Xbox 360…
“.Net Framework” bu özelliklerle diğer “Framework”lerden avantajlı hale geldi. Faydalarından biri de yazılım geliştiricilere “Bellek Yönetimi(Memory Management)”ni  bırakmayıp CLR ile üstlenmesi. Yazılım geliştiricilerin geliştirdikleri uygulamalar içerisindeki nesnelerin bellekte olup olmadıklarını kontrol etmelerine gerek kalmadan daha kolay uygulama geliştirme ortamı sağlamasıdır. Bunu da CLR içerisinde bulunan “Çöp Toplayıcı(Garbage Collector)” aracılığıyla yapmaktadır. “.Net Framework” ile getirilen “public key token” yapısı ile geliştirilen “Assembly”lerin çakışması diğer bir adıyla “DLL Hell” ortadan kaldırılmıştır. Son olarak “Veri Hakkında Bilgi(Metadata)” veren bir yapı ile tipler arasında çözümlemeler yapmak mümkün hale getirilmiştir.

1990’ların sonlarına doğru Microsoft tarafından “Next Generation Windows Services(NGWS)” adıyla geliştirilmeye başlanan “.Net Framework”, 2000 yılında ilk beta versiyonu olan “.Net Framework 1.0” adıyla piyasaya çıktı. Daha sonraları sırasıyla “.Net Framework 1.0 Beta 1”, “.Net Framework 1.0 Beta 2” ile değişikliğe uğrayarak 05.01.2002 tarihinde “.Net Framework 1.0 RTM” tam anlamıyla piyasaya oturdu. Bundan sonra “.Net Framework 1.0” üzerine 3 tane “Service Pack” daha getirildi. Bir sonraki versiyonu olan “.Net Framework 1.1 RTM” 01.04.2003 tarihinde piyasaya sürüldü ve bu versiyon üzerinde 2 “Service Pack” çıkartıldı. 07.11.2005 tarihinde “.Net Framework 2.0 RTM” çıkartılarak yeni bir geçiş daha yapılmış olundu. “.Net Framework 2.0”ın Vista versiyonu ve bunun üzerine de bir tane “Service Pack”i çıkartıldıktan sonra “.Net” yapısını oldukça güçlü kılan “.Net Framework 3.0 RTM” 06.11.2006 tarihinde piyasaya sürüldü. Bu versiyon için bir tane “Service Pack” çıkartılarak şu anki bulunduğumuz nokta olan “.Net Framework 3.5 RTM” versiyonu 19.11.2007 tarihinde piyasaya sürüldü.

.Net Framework 1.0
• İlk versiyon olan “.Net Framework 1.0” ile “Framework” temelleri getirilmiştir. Bununla birlikte yazılımcılara ileriye dönük vizyon sunulmuştur.

.Net Framework 1.1
• Asp.Net mobil kontrolleri için “yerleşik(Built-In)” destek sağlandı. Daha önceleri sonradan eklenebiliyordu.
• Güvenlik değişiklikleri oldu.
• ODBC ve Oracle veritabanları için yerleşik destek sağlandı.
• Mobil cihazlar için “.Net Compact Framework” ortaya çıktı.
• “Internet Protocol version 6(Ipv6)” desteği sağlandı.
• Pek çok API değişiklikleri yaşandı.
.Net Framework 2.0
• Pek çok API değişiklikleri yaşandı.
• Asenkron yapıya hizmet etmek, bellek konumlandırması yapmak, “Assembly”leri yüklemek ve daha fazlası gibi işlemleri daha iyi yapan bir API getirildi. Kendi planlayıcısını ve bellek yöneticisini uygulayan bu API, ilk başta Microsoft SQL Server içerisindeki çalışma zamanı sunma mekanizması için geliştirilmişti.
• Donanım ortamları için tam bir 64-bit desteği getirildi.
• .Net CLR içerisinde Generics adı verilen dil yapısı yerleşik olarak getirildi.
• Geliştirilmiş ASP.Net kontrolleri getirildi.
• Yeni veri kontrolleri ve geliştirilmiş veri bağlama sistemi getirildi.
• ASP.Net için kişiselleştirilmiş özellikler getirildi.
• “.Net Micro Framework” çıkartıldı.

.Net Framework 3.0
• Windows Vista ve Windows Server 2008 için API’ler geliştirildi.
• WinFX olarak adlandırıldı.
• Common Language Runtime olarak 2.0 versiyonu korunmaya devam edildi.
• “Windows Presentation Foundation(Avalon)” getirildi.
• “Windows Workflow Foundation(WF)” getirildi.
• “Windows Communication Foundation(Indigo)” getirildi.
• “Windows CardSpace(InfoCard)” getirildi.

.Net Framework 3.5
Gelişen “.Net Framework” versiyon olarak 3.5 seviyesine kadar gelmiştir. Alt yapı olarak yine Common Language Runtime 2.0’ı kullanan ve çok önemli bir yenilik olan “LINQ(Language Integrated Query)” getirildi.
• C# 3.0 ve VB.Net 9.0 derleyicisi içerisine yeni özellikler getirildi.
• “Expression Tree” ve “Lambda Method” eklendi.
• “Extension Method” eklendi.
• “Anonymous Type” eklendi.
• “Language Integrated Query(LINQ)” yapısı çeşitli sağlayıcıları ile eklendi.
o LINQ to Objects
o LINQ to XML
o LINQ to SQL
• ADO.Net’e sayfalama desteği eklendi.
• Yerel belleklenmiş verilere erişebilmek için ADO.Net’e yeni bir API eklendi.
• WMI ve Active Directory yönetilir hale getirildi.
• WCF ve WF ile platform bağımsız dağıtık uygulamalar içerisinde iş akışı sistemi kurma sağlandı.
• ASP.Net ile Ajax birleştirildi.
• Network API’si ile asenkron I/O işlemleri desteklendi.

Visual Studio 2008
2007 yılında piyasaya sürülen “Visual Studio 2008” ile eklenen özellikler tüm yazılım geliştiricilere daha kolay uygulama geliştirme imkanı sağlamaktadır. Microsoft’un devam ettirdiği “Express Edition” serisi C#, Vb.Net, C++ ve Visual Web Developer olarak ilerlemekte. “Visual Studio 2008” platformunda .Net Framework 3.5 yer almaktadır.  “Visual Studio 2008” sayesinde yazılım geliştiricilerin daha güvenli, daha yönetilebilir ve Windows Vista ile Microsoft Office 2007 özelliklerinden faydalanılabilceği bir platform oluşturulmuştur.
Aşağıda “Visual Studio 2008” ile gelen yenilikler bulunmaktadır:

• Çoklu Hedefleme(Multi-Targeting): “Visual Studio 2008” içerisinde “.Net Framework 2.0”, “.Net Framework 3.0”, “.Net Framework 3.5” versiyonları bazında uygulama geliştirebilirsiniz. Böylelikle “Visual Studio 2008” ortamından faydalanarak “.Net Framework 2.0” uygulaması geliştirme imkanı sunmakta.
• Web Designer: “Visual Studio 2008” içerisinde yeni “Web Tasarımı ve CSS” desteği eklendi.
• AJAX: “Visual Studio 2008” ile AJAX yerleşik olarak gelmekte. Ayrıca bir eklenti kurmaya gerek kalmamakta.
• LINQ to SQL: Yerleşik OR/M(Object-Relitional Mapper) getirilerek, ilişkisel veritabanı sistemlerinde “.Net“ nesnelerini kullanarak modelleme yapabilme imkanı sağlandı.
• Sorgu Sözdizimi: Standart LINQ sorugu operatörlerini kullanarak kısa yollu sorgulama yapılmaya imkan sağlandı.
• Anonim Tipler(Anonymous Types): Açıkça farklı bir yerde tanımlama yapmadan satır içerisinde kendi tipinizi tanımlamaya yarayan bir özellik. Anonim tipler LINQ kullanılarak data sorgulaması yapıldığında çok kullanışlı olurlar.
• Lambda Ifadeleri(Lambda Expressions): Anonim metotlar yazmak için daha kısa ve daha fonksiyonel ifadeler.
• Genişletme Metotları(Extension Methods): Mevcut tipi modifiye etmeden, tipin içerisine yeni “Public” metotlar eklenebilmesi özelliği.
• Otomatik Özellikler(Automatic Properties): Get ve Set ifadelerini içeren özellikler(Property) için “Private” alanlar tanımlamaksızın kullanım izni veren özellik.
• Nesne ve Koleksiyon İlklendiriciler(Object and Collection Initializers): Nesneler ve kolleksiyonları ilklendirmenin kısayolunun getirildiği özellik.
• Javascript Hata Ayıklama İşlemi(Javascript Debugging): “Visual Studio 2008” ile javascript içerisinde “Hata Ayıklama İşlemi(debug)” yapmak mümkündür.
• Javascript Intellisense: “Visual Studio 2008” ile Javascript kodlaması esnasında gelişmiş “Javascript Intellisense”inden faydalanılacak.
• .Net Framework Kaynak Koduna Erişim: “Hata Ayıklama İşlemi” esnasında .Net Framework içerisindeki çekirdek kütüphaneler içerisine girilebilir hale getirildi.

Bu özelliklerin yanısıra “Visual Studio 2005”te getirilmeye çalışılan ve “Visual Studio 2008 Professional Edition”da eklenen “Unit Test” özelliğinden de söz etmek gerekir. Bu özellik “Visual Studio 2008 Professional Edition” içerisinde bulunmakla beraber, geliştirilen kod parçacıkları için test kodları geliştirilebilir hale gelindi.

Programlama Dilleri
Eskiden yerleşik olarak ”Visual Basic”, “Visual C#”, “Visual C++” ve “Visual J#” programlama dilleri gelmekteydi. “Visual Studio 2008“ ile ”Visual Basic”, “Visual C#”, “Visual C++” dilleri yerleşik olarak gelmekte. Artık “Visual J#”ı “Visual Studio 2008” içerisinde bulunmuyor. “Visual Basic”in şu an 9.0 versiyonu, “Visual C#”ta ise 3.0 versiyonu kullanılmaktadır. O zaman şöyle bir bilgi vermekte fayda vardır: ”IDE(Integrated Development Enviroment) olarak Visual Studio 2008, Visual C# versiyonu olarak 3.0, Visual Basic versiyonu olarak 9.0 ve CLR versiyonu olarak 2.0 kullanılmaktadır”. Teknoloji olarak son gelinen nokta budur.
Bunlar haricinde “Visual Studio 2008” içerisinde A#, F#, Phyton, Ruby, NetCobol, Delphi.Net gibi daha bir çok programlama dilleri desteklenmektedir.
 
June 14

System.Collections ve System.Collections.Generic Namespace'i ile ilgili örnekler

class Program
{
    
static void Main(string[] args)
     {
         
#region System.Collections.Generic

          #region List<T>
         
//ArrayList: Object tipindeki elemanlardan olusan bir kolleksiyondur.
         
//List: T bolumunde belirtilen tipteki elemalardan olusan kolleksiyondur.
         
//Asagidaki ornekte her elemani string olan ve adi ogrenciler olan
         
//generic bir kolleksiyon tanimlamisi yaptik.
         
//Generic yapilari 
         
// --> Tip guvenli
         
// --> Boxing ve Unboxing islemlerinden kaynaklanan
         
// performans yavasligini ortadan kaldirir.
         
// --> Hizli
         
System.Collections.Generic.List<string> ogrenciler =
              
new System.Collections.Generic.List<string>();
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               ogrenciler.Capacity, ogrenciler.Count);
          ogrenciler.Add(
"Pinar Sirnak");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
              
ogrenciler.Capacity, ogrenciler.Count);
          ogrenciler.Add(
"Haci Inceyilmaz");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
              
ogrenciler.Capacity, ogrenciler.Count);
          ogrenciler.Add(
"Murat Sever");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               ogrenciler.Capacity, ogrenciler.Count);
          ogrenciler.Add(
"Efsun Karaca");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
              
ogrenciler.Capacity, ogrenciler.Count);
          ogrenciler.Add(
"Yusuf Karakus");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               ogrenciler.Capacity, ogrenciler.Count);

          //List.TrimExcess metodu ArrayList.TrimToSize metodu ile ayni isi yapar
         
//Capacity degerini Count degerine indirir.
         
ogrenciler.TrimExcess();
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               ogrenciler.Capacity, ogrenciler.Count);

         
foreach (string item in ogrenciler)
              
Console.WriteLine(item);

          #endregion

          #region Dictionary<TKey, TValue>

          //HasTable ile ayni isi yapan generic kolleksiyondur.
         
System.Collections.Generic.Dictionary<int, string> iller =
              
new System.Collections.Generic.Dictionary<int, string>();

          iller.Add(34, "Istanbul");
          iller.Add(35,
"Izmir");
          iller.Add(06,
"Anakara");
         
Console.WriteLine("Plaka numarasi 34 olan il: {0}", iller[34]);

          //Dictionary<TKey, TValue> listeleme
         
foreach (System.Collections.Generic.KeyValuePair<int, string> item in iller)
              
Console.WriteLine("Plaka No:{0}, Il: {1}", item.Key, item.Value);

          #endregion

          System.Collections.Generic.LinkedList<string> liste =
              
new System.Collections.Generic.LinkedList<string>();

          System.Collections.Generic.LinkedListNode<string> ilkNode = 
               liste.AddFirst(
"Umit Karan");

          System.Collections.Generic.LinkedListNode<string> ikinciNode = 
               liste.AddAfter(ilkNode,
"Lincoln");

          System.Collections.Generic.LinkedListNode<string> ucuncuNode = 
              
liste.AddBefore(ikinciNode, "Skibbe");

          foreach (string item in liste)
              
Console.WriteLine(item);

          #endregion

          #region System.Collections

          #region ArrayList

          //ArrayList Count, Capacity, TrimgToSize()
         
System.Collections.ArrayList arrList =
              
new System.Collections.ArrayList();

          Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               arrList.Capacity, arrList.Count);

          //ArrayList'e eleman ekler
         
arrList.Add("Pinar Sirnak");

          Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
              
arrList.Capacity, arrList.Count);
          arrList.Add(
"Haci Inceyilmaz");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               arrList.Capacity, arrList.Count);
          arrList.Add(
"Efsun Karaca");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               arrList.Capacity, arrList.Count);
          arrList.Add(
"Ali Fuat Navruz");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               arrList.Capacity, arrList.Count);
          arrList.Add(
"Erdem Akyildiz");
         
Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               arrList.Capacity, arrList.Count);

         
foreach (object o in arrList)
              
Console.WriteLine(o);

          Console.WriteLine("Trim To Size Methodu Calistiriliyor!!!");

          arrList.TrimToSize();

          Console.WriteLine("Kapasite: {0}, Eleman Sayisi: {1}"
               arrList.Capacity, arrList.Count);

          //ArrayList'i siralar
          arrList.Sort();

          foreach (object o in arrList)
              
Console.WriteLine(o);

          //ArrayList icerisinde "Yusuf Karakus" 
         
//degerine sahip eleman olup olmadigini kontrol eder
         
Console.WriteLine(arrList.Contains("Yusuf Karakus"));
         
Console.WriteLine(arrList.Contains("Erdem Akyildiz"));

          #endregion

          #region HashTable
          //Key Value ciftleri tutan kolleksiyon yapisi
         
System.Collections.
Hashtable ht = new System.Collections.Hashtable();

         
//HashTable'a eleman ekleme - yontem#1
         
ht.Add("sinif", "class");
          ht.Add(
"arayuz", "interface");

         
//HashTable'a eleman ekleme - yontem#2
         
ht["alan"] = "field";

          //HashTable'a ayni key'i 2 kere ekleyemezsiniz
          //ht.Add("sinif", "asdasd");

          //HashTable icerisindeki bir elemanin degerini degistirmek
         
ht["arayuz"] = "User Interface";

         
foreach (System.Collections.DictionaryEntry item in ht)
              
Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value);

          #endregion

          #region Stack

          //LIFO(Last In First Out) kurali gecerlidir.
         
System.Collections.Stack stk = new System.Collections.Stack();
         

          //Stack kolleksiyonuna eleman eklemek 
         
//icin Push Metodunu kullaniriz.
         
stk.Push("Efsun Karaca");
          stk.Push(
"Yusuf Karakus");
          stk.Push(
"Turan Coban");
          stk.Push(
"Anil Biyik");

         
//Pop metodu; son eklenen nesneyi siler ve
         
//sildigi nesneyi geri dondurur.
         
Console.WriteLine("Listeden cikaritilan eleman: {0}", stk.Pop());

          //Peek metodu; son eklenen nesneyi listeden silmeden gosterir.
         
Console.WriteLine("Gosterilen eleman: {0}", stk.Peek());

          foreach (object o in stk)
              
Console.WriteLine("Isim: {0}", o);

          #endregion

          #region Queue

          //First In First Out kurali gecerlidir.
         
System.Collections.Queue q = new System.Collections.Queue();
          q.Enqueue(
"Murat Sever");
          q.Enqueue(
"Anil Biyik");
          q.Enqueue(
"Deniz Altintas");
          q.Enqueue(
"Erdem Akyildiz");

          foreach (object o in q)
              
Console.WriteLine("Isim: {0}", o);

          //Kolleksiyona eklenen ilk elemani siler ver
         
//sildigi elemani geri dondurur.
         
Console.WriteLine("Listeden Cikartilan Eleman: {0}", q.Dequeue());

          //Kolleksiyonun en basindaki elemanin silmeden dondurur.
         
Console.WriteLine("Listenin Basindaki Eleman: {0}", q.Pek());
         
Console.WriteLine("----------");
         

          foreach (object o in q)
              
Console.WriteLine("Isim: {0}", o);

         
#endregion

          #region SortedList
         
//sirali HashTable --> Key/Value ciftleri tutar.
         
System.Collections.SortedList sl = new System.Collections.SortedList();
          sl.Add(
"sinif", "class");
          sl.Add(
"arayuz", "interface");

         
foreach (System.Collections.DictionaryEntry item in sl)
              
Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value);
 

          #endregion 
          #endregion
     }
}

June 09

LINQ Temel Sorgulama

Aşağıdaki örnekte LINQ ile deyimler yazarken ihtiyacınız olablieceğini düşündüğüm sorgular bulunmaktadır. Özellikle left outer join kullanıp çoklu kolon üzerinde gruplama yapma sorgusuna dikkat etmenizi tavsiye ederim.

public class Kisi
{
     public int KisiID { get; set; }
     public string Ad { get; set; }
     public string Soyad { get; set; }
}

public class Telefon
{
     public int TelefonID { get; set; }
     public int KisiID { get; set; }
     public string AlanKodu { get; set; }
     public string TelefonNo { get; set; }
     public TelefonTipleri Tip { get; set; }
}

public enum TelefonTipleri
{
     Ev,
     Is,
     Cep,
     Yazlik
}

class Program
{
     static void Main(string[] args)
     {
          #region Kisiler
          List<Kisi> kisiler = new List<Kisi>()
          {
               new Kisi(){ KisiID=1, Ad="Fuat", Soyad="Narvuz"},
               new Kisi(){ KisiID=2, Ad="Haci", Soyad="Inceyilmaz"},
               new Kisi(){ KisiID=3, Ad="Deniz", Soyad="Altintas"},
               new Kisi(){ KisiID=4, Ad="Erdem", Soyad="Akyildiz"},
               new Kisi(){ KisiID=5, Ad="Anil", Soyad="Biyik"},
               new Kisi(){ KisiID=6, Ad="Yusuf", Soyad="Karakus"},
               new Kisi(){ KisiID=7, Ad="Turan", Soyad="Coban"},
               new Kisi(){ KisiID=8, Ad="Pinar", Soyad="Sirnak"}
          };
          #endregion

          #region Telefonlar
          List<Telefon> telefonlar = new List<Telefon>()
          {
               new Telefon() { TelefonID=1, KisiID=1, 
                    AlanKodu="212", TelefonNo="2123213"
                    Tip=TelefonTipleri.Cep},
               new Telefon() { TelefonID=2, KisiID=1, 
                    AlanKodu="233", TelefonNo="1231231"
                    Tip=TelefonTipleri.Ev},
               new Telefon() { TelefonID=3, KisiID=1, 
                    AlanKodu="444", TelefonNo="4564575"
                    Tip=TelefonTipleri.Is},
               new Telefon() { TelefonID=4, KisiID=2, 
                    AlanKodu="555", TelefonNo="5675685"
                    Tip=TelefonTipleri.Cep},
               new Telefon() { TelefonID=5, KisiID=3, 
                    AlanKodu="667", TelefonNo="67867866"
                    Tip=TelefonTipleri.Ev},
               new Telefon() { TelefonID=6, KisiID=4, 
                    AlanKodu="555", TelefonNo="23424234"
                    Tip=TelefonTipleri.Is},
               new Telefon() { TelefonID=7, KisiID=4, 
                    AlanKodu="888", TelefonNo="2342342"
                    Tip=TelefonTipleri.Cep},
               new Telefon() { TelefonID=8, KisiID=5, 
                    AlanKodu="999", TelefonNo="575672723"
                    Tip=TelefonTipleri.Cep},
               new Telefon() { TelefonID=9, KisiID=6, 
                    AlanKodu="000", TelefonNo="34523463"
                    Tip=TelefonTipleri.Yazlik},
               new Telefon() { TelefonID=10, KisiID=6, 
                    AlanKodu="111", TelefonNo="2352365"
                    Tip=TelefonTipleri.Yazlik},
               new Telefon() { TelefonID=11, KisiID=7, 
                    AlanKodu="222", TelefonNo="5745"
                    Tip=TelefonTipleri.Ev},
               new Telefon() { TelefonID=12, KisiID=7, 
                    AlanKodu="333", TelefonNo="58568648"
                    Tip=TelefonTipleri.Is},
               new Telefon() { TelefonID=13, KisiID=7, 
                    AlanKodu="333", TelefonNo="345346346"
                    Tip=TelefonTipleri.Is}
          };
          #endregion

          ////LINQ select, from
         
//tum kisilerin adini ve soyadini getiren sorgu
         
IEnumerable<Kisi> kList = from Kisi k in kisiler
                                    select k;

          foreach (var item in kList)
               Console.WriteLine(item.Ad + " " + item.Soyad);
          //----------------------------------------------------

          ////LINQ select, from, orderby
         
////tum kisileri soyadina gore z'den a'ya siralayarak getiren sorgu
         
IOrderedEnumerable<Kisi> kList = from Kisi k in kisiler
                                           orderby k.Soyad descending
                                           
select k;

          foreach (var item in kList)
               Console.WriteLine(item.Ad + " " + item.Soyad);

          //----------------------------------------------------

          ////LINQ select, from, where
         
////KisiID degeri 3'ten buyuk olan kisileri getiren sorgu
         
IEnumerable<Kisi> kList = from Kisi k in kisiler
                                    where k.KisiID > 3
                                    select k;

          foreach (var item in kList)
               Console.WriteLine(item.Ad + " " + item.Soyad);

          //----------------------------------------------------

          ////LINQ select, from, Take
          ////kisilerden ilk 5 kisiyi getiren sorgu
         
IEnumerable<Kisi> kList = (from Kisi k in kisiler
                                    select k).Take(5);

          foreach (var item in kList)
               Console.WriteLine(item.Ad + " " + item.Soyad);

          //----------------------------------------------------

          ////LINQ select, from, Skip, Take
         
////kisilerden 3. ile 7. sira arasindaki kisileri getiren sorgu 
         
var kList = (