C#<br />Fatih Boy<br />www.enterprisecoding.com<br />fatih@enterprisecoding.com<br />twitter.com/fatihboy<br />friendfeed....
Ajanda<br />Ortak Dil Çalışma-Zamanı (CLR), IL, JIT<br />Visual Studio 2010  ve özellikleri<br />Temsilci (Delegate)<br />...
Ortak Dil Çalışma-Zamanı (CLR)<br />.Net framework, Ortak dil çalışma-zamanı (Common Language Runtime)  ve ekrafında şekil...
.Net yol haritası<br />SP1<br />3.5<br />3.0<br />.Net 1.0<br />.Net 1.1<br />.Net 2.0<br />.Net 4.0<br />2002<br />2003<b...
Temsilci (Delegate)<br />delegate tanımı<br />parametreler<br />public delegate void Uyari(string mesaj);<br />.<br />.<br...
Olay (Event)<br />delegate tanımı<br />event tanımı<br />public delegate voidSurecDegistiIsleyici(int tamamlanmaOrani);<br...
Olay (Event)<br />Olay bildirimine kayıt<br />islem.SurecDegisti += islem_SurecDegisti;<br />.<br />.<br />islem.SurecDegi...
Olay (Event)<br />Özel temsilci (delegate)<br />privateSurecDegistiIsleyici _surecDegistiIsleyici;<br />public eventSurecD...
Olay (Event)<br />Olay bildirimine kayıt olunduğuna emin olun<br />protected virtual void OnSurecDegistiIsleyici(inttamaml...
Olay (Event)<br />add ve remove bölümleri derleme zamanında add_XXX ve remove_XXX şeklinde metodlara dönüştürülür<br />+= ...
Lambda İfadeleri<br />En basit şekliyle anonim metodların sözdizimi geliştirilmiş halidir<br />Lambda ifadelerle birlikte ...
Lambda İfadeleri – {Örnek, foreach}<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br...
Lambda İfadeleri – {Örnek, delegate}<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<b...
Lambda İfadeleri – {Örnek, lambda}<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br ...
Lambda İfadeler –{Temsilciler}<br />Lambda ifadeler temsilcilere atanabilir<br />public delegate void Uyari(string mesaj);...
Lambda İfadeler – {Dış değişkenler}<br />Lambda ifadeler yerel değişkenleri ve tanımlandıkları metod’a ait parametreleri<b...
Lambda İfadeler – {Dış değişkenler}<br />Lambda ifadelerince kullanılan dış değişkenlerin değerleri lambda ifade<br />çağı...
Lambda ifade içerisinde tanımlanan değişkenler her çağırım için tekildirler</li></li></ul><li>Genişletme Metodları<br />Me...
Genişletme Metodları<br />Mevcut bir veri türünün içeriğine müdahale etmeden yeni metodlarla genişletilmesidir<br />Genişl...
Genişletme Metodları<br />Genişletme metodunun string türü için olduğunu belirtir<br />public static class StringEx{<br />...
Anonim Türler<br />Derleyici tarafından derleme zamanı oluşturulan türlerdir<br />new anahtar kelimesi takip eden nesne il...
Anonim Türler<br />var ogrenci = new {Adi = "Fatih", Bolum = "Bil. Müh." }<br />Derleyici tarafından üretilen kod;<br />in...
Anonim Türler<br />Anonim tür tanımlanırken özellik isimleri tanımlama sırasında kullanılan değişken isimlerinden faydalan...
Anonim Türler<br />İki anonim tür örneği, aynı tür elementlerle tanımlanmış ve aynı assembly içerisinde buunuyorsa arka pl...
Dinamik<br />object nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}...
Dinamik<br />object nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}...
Dinamik<br />Aşağıdaki kod derleme zamanı hata vermese de çalışma zamanı hata oluşturur;<br />object nesne = 1;<br />if (n...
Dinamik<br />dynamic nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />...
Dinamik<br />Dinamik kullanılırken derleyici desteği olmayacağı için geliştirme zamanı kod <br />daha fazla hataya açıktır...
Dinamik<br />Bir önceki örneğin derlenmesi sonucu oluşan C# kodu;<br />internal class Program {    private static void Mai...
Dinamik<br />
Öznitelikler (Attributes)<br />Öznitelikler assembly, türler, metod üyeleri, dönüş değerleri ve parametreler gibi kod elem...
Öznitelikler (Attributes)<br />Öznitelikler abstract tanımlanmış olan System.Attribute sınıfından türetilerek oluşturulabi...
Öznitelikler (Attributes)<br />Sadece sınıflar için kullanılabilir<br />Aynı sınıf üzerinde birden fazla kullanılamaz<br /...
Reflection<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br />MemberInfo[] ogrencial...
Reflection<br />OgrenciogrenciInstance = new Ogrenci{<br />                                       Adi = "Fatih", <br />   ...
Xml<br />Tür’ün tanımlı olacağı xml isimuzayı<br />Xml tür adı<br />[XmlType(Namespace="http://www.enterprisecoding.com",T...
Xml – {XmlRoot, XmlArray, XmlArrayItem}<br />Xml dokümanı giriş elemanı<br />[XmlRoot(Namespace="http://www.enterprisecodi...
Xml – {serilization}<br />Serileştirilecek tür<br />XmlSerializerserializer = newXmlSerializer(typeof(OgrenciListesi));<br...
Xml – {Çıktı Dosyası}<br /><?xmlversion="1.0" encoding="utf-8"?><br /><OgrenciListesixmlns:xsi="http://www.w3.org/2001/XML...
Xml – {Çıktı Dosyası}<br /><?xmlversion="1.0" encoding="utf-8"?><br /><OgrenciListesixmlns:xsi="http://www.w3.org/2001/XML...
Xml – {de-serilization}<br />XmlSerializerserializer = newXmlSerializer(typeof(OgrenciListesi));<br />using (StreamReaderd...
LINQ<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br />List<Ogrenci> ogrenciler = n...
LINQ<br />Aynı sorgunun farklı bir şekilde ifadesi;<br />var bilMuhOgrencileri = from ogrenci in ogrenciler<br />whereogre...
LINQ – {örnekler}<br />Aynı sorgu, isimler sıralı şekilde;<br />var bilMuhOgrencileri = from ogrenci in ogrenciler<br />wh...
LINQ – {örnekler}<br />Bir önceki örnekteki akıcı sözdizimini incelersek;<br />var bilMuhOgrencileri = ogrenciler<br />   ...
LINQ – {örnekler}<br />Dış değişken kullanırken dikkati elden bırakmamalı;<br />int[] sayilar = { 9, 2, 0, 8, 6, 7, 5, 4, ...
Threading<br />static void Main(string[] args) {<br />Thread t = newThread(EkranaYaz); <br />    t.Start();<br />for (int ...
Threading<br />static void Main(string[] args) {<br />Thread t = newThread(EkranaYaz); <br />    t.Start();<br />for (int ...
Threading – {Veri geçisi}<br />public delegate void ThreadStart();<br />public delegate voidParameterizedThreadStart (obje...
Veritabanı<br />SqlConnection baglanti = newSqlConnection(@"Server=.SQLEXPRESS;Database=AdventureWorks;Trusted_Connection=...
Teşekkürler<br />Fatih Boy<br />www.enterprisecoding.com<br />fatih@enterprisecoding.com<br />twitter.com/fatihboy<br />fr...
Upcoming SlideShare
Loading in …5
×

C#, Microsoft Yaz Okulu 2010 - İzmir

1,955 views

Published on

2010 yılı Microsoft yaz okulu izmir'de gerçekleştirdiğim C# eğitimi sunumu

Published in: Technology
  • Be the first to comment

  • Be the first to like this

C#, Microsoft Yaz Okulu 2010 - İzmir

  1. 1. C#<br />Fatih Boy<br />www.enterprisecoding.com<br />fatih@enterprisecoding.com<br />twitter.com/fatihboy<br />friendfeed.com/fatihboy<br />
  2. 2. Ajanda<br />Ortak Dil Çalışma-Zamanı (CLR), IL, JIT<br />Visual Studio 2010 ve özellikleri<br />Temsilci (Delegate)<br />Olay (Event)<br />Lambda İfadeleri<br />Genişletme (Extension) Metodları<br />Anonim Türler<br />Dinamik<br />Öznitelikler (Attributes)<br />Reflection<br />XML <br />LINQ<br />Threading<br />Veritabanı<br />
  3. 3. Ortak Dil Çalışma-Zamanı (CLR)<br />.Net framework, Ortak dil çalışma-zamanı (Common Language Runtime) ve ekrafında şekillenmiş bir grup dll’den oluşmaktadır.<br />CLR manage kodları çalıştırmaktadır ve C#’ta managed dillerden birisidir.<br />Managed kod Ara Dil (Intermediate Language, IL) ile ifade edilmektedir<br />CLR bir assembly’yi yüklediği zaman IL kodlarını makinenin anlayabileceği koda dönüştürür. Bu dönüşüm Just-In-Time (JIT) derleyici tarafından geçekleştirilir.<br />
  4. 4. .Net yol haritası<br />SP1<br />3.5<br />3.0<br />.Net 1.0<br />.Net 1.1<br />.Net 2.0<br />.Net 4.0<br />2002<br />2003<br />2005-08<br />2010<br />CLR 1.0<br />CLR 1.1<br />CLR 2.0<br />CLR 4.0<br />
  5. 5. Temsilci (Delegate)<br />delegate tanımı<br />parametreler<br />public delegate void Uyari(string mesaj);<br />.<br />.<br />.<br />Uyari uyari = delegate(string mesaj) {          MessageBox.Show(mesaj);};uyari("Hatalı değer girildi");<br />.<br />.uyari("Lütfen yeniden deneyiniz");<br />uyari = delegate{         MessageBox.Show("Hata oluştu");};uyari("kullanımayan parametre");<br />atama<br />kullanımı<br />Alternatif tanımlama<br />
  6. 6. Olay (Event)<br />delegate tanımı<br />event tanımı<br />public delegate voidSurecDegistiIsleyici(int tamamlanmaOrani);<br />public eventSurecDegistiIsleyici SurecDegisti;<br />islem.SurecDegisti += newSurecDegistiIsleyici(islem_SurecDegisti);<br />void islem_SurecDegisti(int tamamlanmaOrani) {<br /> .<br /> .}<br />Olay bildirimine kayıt<br />Olay gerçekleştiğinde işletilecek süreç<br />
  7. 7. Olay (Event)<br />Olay bildirimine kayıt<br />islem.SurecDegisti += islem_SurecDegisti;<br />.<br />.<br />islem.SurecDegisti -= islem_SurecDegisti;<br />Olay bildirimine kaydı silme<br />
  8. 8. Olay (Event)<br />Özel temsilci (delegate)<br />privateSurecDegistiIsleyici _surecDegistiIsleyici;<br />public eventSurecDegistiIsleyici SurecDegisti {<br />add { _surecDegistiIsleyici += value; }<br />remove { _surecDegistiIsleyici -= value; }<br />}<br />Olay bildirimine kayıt<br />Olay bildirimine kaydı silme<br />
  9. 9. Olay (Event)<br />Olay bildirimine kayıt olunduğuna emin olun<br />protected virtual void OnSurecDegistiIsleyici(inttamamlanmaOrani) {<br />if (SurecDegistiIsleyici != null) {<br />SurecDegistiIsleyici(tamamlanmaOrani);<br /> }<br />}<br />Olay bildirimini tetikleyin<br />
  10. 10. Olay (Event)<br />add ve remove bölümleri derleme zamanında add_XXX ve remove_XXX şeklinde metodlara dönüştürülür<br />+= ve -= operatörleri derleme zamanında add_XXX remove_XXX metodlarına çağrılara dönüştürülür<br />Metodlarda olduğu gibi olaylarda virtual, overridden, abstract veya sealed olarak tanımlanabilir<br />
  11. 11. Lambda İfadeleri<br />En basit şekliyle anonim metodların sözdizimi geliştirilmiş halidir<br />Lambda ifadelerle birlikte artık delegate anahtar kelimesine ve parametre türlerinin belirtilmesine gerek kalmamıştır<br />Tür bilgisi derleyici tarafından kod içerisindeki kullanımdan yola çıkarak bulunabilir<br />
  12. 12. Lambda İfadeleri – {Örnek, foreach}<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br />List<Ogrenci> ogrenciler = newList<Ogrenci> {<br />newOgrenci{ Adi = "Ali", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Fatih", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Melis", Bolum = "Deri Müh." }<br />};<br />Bilgisayar mühendisi olan öğrencilerin listesi;<br />List<Ogrenci> bilMuhOgrencileri = newList<Ogrenci>();<br />foreach (Ogrenci ogrenci in ogrenciler) {<br />if (ogrenci.Bolum == "Bil. Müh.") {<br /> bilMuhOgrencileri.Add(ogrenci);<br /> }<br />}<br />
  13. 13. Lambda İfadeleri – {Örnek, delegate}<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br />List<Ogrenci> ogrenciler = newList<Ogrenci> {<br />newOgrenci{ Adi = "Ali", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Fatih", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Melis", Bolum = "Deri Müh." }<br />};<br />List<Ogrenci> bilMuhOgrencileri = ogrenciler.FindAll(<br />delegate(Ogrenci ogrenci) {<br />return ogrenci.Bolum == "Bil. Müh.";<br /> }<br />);<br />
  14. 14. Lambda İfadeleri – {Örnek, lambda}<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br />List<Ogrenci> ogrenciler = newList<Ogrenci> {<br />newOgrenci{ Adi = "Ali", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Fatih", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Melis", Bolum = "Deri Müh." }<br />};<br />List<Ogrenci> bilMuhOgrencileri = ogrenciler.FindAll(ogrenci => ogrenci.Bolum == "Bil. Müh.");<br />List<Ogrenci> bilMuhOgrencileri = ogrenciler.FindAll((Ogrenci ogrenci) => ogrenci.Bolum == "Bil. Müh.");<br />
  15. 15. Lambda İfadeler –{Temsilciler}<br />Lambda ifadeler temsilcilere atanabilir<br />public delegate void Uyari(string mesaj);<br />.<br />.<br />.<br />Uyari uyari = mesaj =>  MessageBox.Show(mesaj);uyari("Hatalı değer girildi");<br />.<br />.uyari("Lütfen yeniden deneyiniz");<br />
  16. 16. Lambda İfadeler – {Dış değişkenler}<br />Lambda ifadeler yerel değişkenleri ve tanımlandıkları metod’a ait parametreleri<br />(dış değişkenleri) kullanabilirler;<br />public delegate void Uyari(string mesaj);<br />.<br />.<br />.<br />string varsayilanMesaj = "Hata Oluştu";<br />Uyari uyari = mesaj =>  MessageBox.Show(mesaj ?? varsayilanMesaj);uyari("Hatalı değer girildi");<br />.<br />.uyari(null);<br />
  17. 17. Lambda İfadeler – {Dış değişkenler}<br />Lambda ifadelerince kullanılan dış değişkenlerin değerleri lambda ifade<br />çağırıldığında hesaplanır;<br />intcarpan = 3;<br />Func<int, int> carpim = x => x * carpan;<br />intsonuc1 = carpim(2); // sonuc1 = 6<br />carpan = 10;<br />intsonuc2 = carpim(2);// sonuc2 = 20<br /><ul><li>Bir dış değişkenin değeri lambda ifade içerisinde değiştirilebilir
  18. 18. Lambda ifade içerisinde tanımlanan değişkenler her çağırım için tekildirler</li></li></ul><li>Genişletme Metodları<br />Mevcut bir veri türünün içeriğine müdahale etmeden yeni metodlarla genişletilmesidir<br />Genişletme metodları statik bir sınıf içerisinde yine statik bir metodla tanımlanır<br />
  19. 19. Genişletme Metodları<br />Mevcut bir veri türünün içeriğine müdahale etmeden yeni metodlarla genişletilmesidir<br />Genişletme metodları statik bir sınıf içerisinde yine statik bir metodla tanımlanır<br />
  20. 20. Genişletme Metodları<br />Genişletme metodunun string türü için olduğunu belirtir<br />public static class StringEx{<br />public static boolBosYadaBoslukMu(this stringstringIfade) {<br />returnstring.IsNullOrEmpty(stringIfade) || <br />stringIfade.Trim() == string.Empty;<br />}<br />}<br />Örnek kullanım;<br />stringornek = "Örnek";<br />Console.Write(ornek.BosYadaBoslukMu());<br />Derleyici taradından oluşturulan kod;<br />stringornek = "Örnek";<br />Console.Write(StringEx.BosYadaBoslukMu(ornek));<br />
  21. 21. Anonim Türler<br />Derleyici tarafından derleme zamanı oluşturulan türlerdir<br />new anahtar kelimesi takip eden nesne ilklendiriciler kullanılarak anonim bir tür oluşturulabilir<br />Anonim türleri var anahtar kelimesi ile referans gösterebilirsiniz<br />
  22. 22. Anonim Türler<br />var ogrenci = new {Adi = "Fatih", Bolum = "Bil. Müh." }<br />Derleyici tarafından üretilen kod;<br />internal class OtomatikUretilmisTurAdi<br />{<br />private string adi; //gercekte farkli bir ad verilebilir<br />private int bolum; //gercekte farkli bir ad verilebilir<br />public OtomatikUretilmisTurAdi (string adi, string bolum) {<br />this.adi = adi; <br />this.bolum = bolum;<br /> }<br />public string Adi { get { return adi; } }<br />public string Bolum { get { return bolum; } }<br />}<br />var ogrenci = new OtomatikUretilmisTurAdi("Fatih", "Bil. Müh.");<br />
  23. 23. Anonim Türler<br />Anonim tür tanımlanırken özellik isimleri tanımlama sırasında kullanılan değişken isimlerinden faydalanarak oluşturulur<br />var ogrenci = new {Adi = "Fatih", Bolum = "Bil. Müh." }<br />string Adi = "Fatih";<br />string Bolum = "Bil. Müh.";<br />var ogrenci = new {Adi, Bolum};<br />string Adi = "Fatih";<br />string Bolum = "Bil. Müh.";<br />var ogrenci = new {Adi = Adi, Bolum = Bolum};<br />
  24. 24. Anonim Türler<br />İki anonim tür örneği, aynı tür elementlerle tanımlanmış ve aynı assembly içerisinde buunuyorsa arka planda aynı türü kullanmaktadır<br />var ogrenci1 = new {Adi = "Fatih", Bolum = "Bil. Müh." };<br />var ogrenci2 = new {Adi = "Melis", Bolum = "Deri Müh." };<br />bool sonuc = ogrenci1.GetType() == ogrenci2.GetType(); //true<br />
  25. 25. Dinamik<br />object nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}<br />
  26. 26. Dinamik<br />object nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}<br />nesne = nesne + 1;<br />Yukarıdaki kodun derlenebilmesi için int türüne dönüşüm gerekli;<br />object nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}<br />nesne = (int)nesne + 1;<br />
  27. 27. Dinamik<br />Aşağıdaki kod derleme zamanı hata vermese de çalışma zamanı hata oluşturur;<br />object nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}<br />nesne = (string)nesne + 1;<br />
  28. 28. Dinamik<br />dynamic nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}<br />dynamic nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}<br />nesne = nesne + 1<br />
  29. 29. Dinamik<br />Dinamik kullanılırken derleyici desteği olmayacağı için geliştirme zamanı kod <br />daha fazla hataya açıktır. Örneğin aşağıdaki kod derleme zamanı hata vermezken<br />çalışma zamanında hataya neden olacaktır;<br />dynamic nesne = 1;<br />if (nesne.GetType() == typeof(int)){<br />Console.WriteLine("Tabiki türü int");<br />}<br />Nesne.VarolmayanBirMetod();<br />
  30. 30. Dinamik<br />Bir önceki örneğin derlenmesi sonucu oluşan C# kodu;<br />internal class Program {    private static void Main(string[] args) {      object nesne = 1;      if (<ma  IN>o__SiteContainer0.<>p__Site1 == null) {        <ma  IN>o__SiteContainer0.<>p__Site1 = CallSite<func><calls  ITE, object, bool>>.Create(          Binder.UnaryOperation(CSharpBinderFlags.None,             ExpressionType.IsTrue,             typeof(Program),             new CSharpArgumentInfo[] {               CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)             }));      }      if (<ma  IN>o__SiteContainer0.<>p__Site2 == null) {        <ma  IN>o__SiteContainer0.<>p__Site2 = CallSite<func><calls  ITE, object, Type, object>>.Create(          Binder.BinaryOperation(CSharpBinderFlags.None,             ExpressionType.Equal,             typeof(Program),             new CSharpArgumentInfo[] {               CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),               CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.UseCompileTimeType, null)             }));      }      if (<ma  IN>o__SiteContainer0.<>p__Site3 == null) {        <ma  IN>o__SiteContainer0.<>p__Site3 = CallSite<func><calls  ITE, object, object>>.Create(          Binder.InvokeMember(CSharpBinderFlags.None,             "GetType",            null,             typeof(Program),            new CSharpArgumentInfo[] {               CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)             }));      }      if (<ma  IN>o__SiteContainer0.<>p__Site1.Target.Invoke(<ma  IN>o__SiteContainer0.<>p__Site1,             <ma  IN>o__SiteContainer0.<>p__Site2.Target.Invoke(<ma  IN>o__SiteContainer0.<>p__Site2,              <ma  IN>o__SiteContainer0.<>p__Site3.Target.Invoke(                <ma  IN>o__SiteContainer0.<>p__Site3, nesne),                 typeof(int)))) {        Console.WriteLine("Tabi ki tx00fcrx00fc int");      }      else {        Console.WriteLine("Tx00fcm makale hatalıymış :P");      }         if (<ma  IN>o__SiteContainer0.<>p__Site4 == null) {        <ma  IN>o__SiteContainer0.<>p__Site4 = CallSite<func><calls  ITE, object, object int,>>.Create(            Binder.BinaryOperation(CSharpBinderFlags.None,              ExpressionType.Add, typeof(Program),              new CSharpArgumentInfo[] {                 CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),                 CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)               }));      }      nesne = <ma  IN>o__SiteContainer0.<>p__Site4.Target.Invoke(<ma  IN>o__SiteContainer0.<>p__Site4, nesne, 1);    }       [CompilerGenerated]    private static class <ma  IN>o__SiteContainer0 {      public static CallSite<func><calls  ITE, object, bool>> <>p__Site1;      public static CallSite<func><calls  ITE, object, Type, object>> <>p__Site2;      public static CallSite<func><calls  ITE, object, object>> <>p__Site3;      public static CallSite<func><calls  ITE, object, object int,>> <>p__Site4;    }  }<br />
  31. 31. Dinamik<br />
  32. 32. Öznitelikler (Attributes)<br />Öznitelikler assembly, türler, metod üyeleri, dönüş değerleri ve parametreler gibi kod elementlerine özel bilgiler eklememizi sağlayan bir mekanizmadır.<br />Özniteliklerin kullanımıyla birlikte C# diline her yeni ihtiyaçta yeni bir anahtar kelime eklenmek zorunda kalmamıştır<br />
  33. 33. Öznitelikler (Attributes)<br />Öznitelikler abstract tanımlanmış olan System.Attribute sınıfından türetilerek oluşturulabilir<br />Tanımlanmaları sırasında hangi kod elementlerinde kullanılabileceği belirtilebilir.<br />
  34. 34. Öznitelikler (Attributes)<br />Sadece sınıflar için kullanılabilir<br />Aynı sınıf üzerinde birden fazla kullanılamaz<br />[AttributeUsage(<br />AttributeTargets.Class, <br />AllowMultiple = false, <br />Inherited = false)]<br />public class OrnekAttribute : Attribute { }<br />Alt sınıflarda tanımlı değil<br />Bir öznitelik tanımlandığını belirtir<br />
  35. 35. Reflection<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br />MemberInfo[] ogrencialanlari = typeof(Ogrenci).GetFields(<br /> BindingFlags.Public |<br /> BindingFlags.Instance);<br />foreach (var ogrenciAlani in ogrencialanlari) {<br />Console.WriteLine("Alan :" + ogrenciAlani.Name);<br />}<br />Çıktı;<br />Alan : Adi<br />Alan : Bolum<br />
  36. 36. Reflection<br />OgrenciogrenciInstance = new Ogrenci{<br /> Adi = "Fatih", <br /> Bolum = "Bil. Müh." };<br />Yukarıdaki ifadenin reflection karşılığı;<br />Type ogrenciType = Type.GetType("Ogrenci");<br />object ogrenciInstace = Activator.CreateInstance(ogrenciType);<br />FieldInfo adiAlani = ogrenciType.GetField("Adi");<br />FieldInfo bolumAlani = ogrenciType.GetField("Bolum");<br />adiAlani.SetValue(ogrenciInstace, "Fatih");<br />bolumAlani.SetValue(ogrenciInstace, "Bil. Müh.");<br />
  37. 37. Xml<br />Tür’ün tanımlı olacağı xml isimuzayı<br />Xml tür adı<br />[XmlType(Namespace="http://www.enterprisecoding.com",TypeName="Ogrenci")]<br />public class Ogrenci{<br /> [XmlAttribute]<br />public string Adi;<br /> [XmlAttribute]<br />public string Bolum;<br />}<br />Veri elemanının xml içerisinde ne şekilde tutulacağını belirtir<br />
  38. 38. Xml – {XmlRoot, XmlArray, XmlArrayItem}<br />Xml dokümanı giriş elemanı<br />[XmlRoot(Namespace="http://www.enterprisecoding.com",ElementName="OgrenciListesi")]<br />public class OgrenciListesi {<br />[XmlArray(ElementName="Ogrenciler")]<br />[XmlArrayItem(ElementName="Ogrenci")]<br />publicOgrenci[] Ogrenciler;<br />}<br />Xml içerisinde oluşturulacak array tanımlaması<br />Xml içerisinde oluşturulacak array elemanlarının tanımlaması<br />
  39. 39. Xml – {serilization}<br />Serileştirilecek tür<br />XmlSerializerserializer = newXmlSerializer(typeof(OgrenciListesi));<br />OgrenciListesiogrenciListesi = newOgrenciListesi {<br />Ogrenciler = new[] {<br />newOgrenci{ Adi = "Ali", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Fatih", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Melis", Bolum = "DeriMüh." }<br /> }<br />};<br />using (StreamWriterdosya = File.CreateText("ogrenciListesi.xml")) {<br />serializer.Serialize(dosya, ogrenciListesi);<br />}<br />Serileştirmenin yapılacağı stream<br />Serileştirilecek nesne<br />
  40. 40. Xml – {Çıktı Dosyası}<br /><?xmlversion="1.0" encoding="utf-8"?><br /><OgrenciListesixmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />xmlns:xsd="http://www.w3.org/2001/XMLSchema" <br />xmlns="http://www.enterprisecoding.com"><br /> <Ogrenciler><br /> <OgrenciAdi="Ali" Bolum="Bil. Müh." /><br /> <OgrenciAdi="Fatih" Bolum="Bil. Müh." /><br /> <OgrenciAdi="Melis" Bolum="DeriMüh." /><br /> </Ogrenciler><br /></OgrenciListesi><br />
  41. 41. Xml – {Çıktı Dosyası}<br /><?xmlversion="1.0" encoding="utf-8"?><br /><OgrenciListesixmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />xmlns:xsd="http://www.w3.org/2001/XMLSchema" <br />xmlns="http://www.enterprisecoding.com"><br /> <Ogrenciler><br /> <OgrenciAdi="Ali" Bolum="Bil. Müh." /><br /> <OgrenciAdi="Fatih" Bolum="Bil. Müh." /><br /> <OgrenciAdi="Melis" Bolum="DeriMüh." /><br /> </Ogrenciler><br /></OgrenciListesi><br />
  42. 42. Xml – {de-serilization}<br />XmlSerializerserializer = newXmlSerializer(typeof(OgrenciListesi));<br />using (StreamReaderdosya = File.OpenText("ogrenciListesi.xml")) {<br />varogrenciListesi=(OgrenciListesi)serializer.Deserialize(dosya);<br /> .<br /> .<br /> .<br />}<br />
  43. 43. LINQ<br />public class Ogrenci{<br />public string Adi;<br />public string Bolum;<br />}<br />List<Ogrenci> ogrenciler = newList<Ogrenci> {<br />newOgrenci{ Adi = "Ali", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Fatih", Bolum = "Bil. Müh." },<br />newOgrenci{ Adi = "Melis", Bolum = "Deri Müh." }<br />};<br />var bilMuhOgrencileri = ogrenciler.Where(ogrenci => ogrenci.Bolum == "Bil. Müh.");<br />
  44. 44. LINQ<br />Aynı sorgunun farklı bir şekilde ifadesi;<br />var bilMuhOgrencileri = from ogrenci in ogrenciler<br />whereogrenci.Bolum == "Bil. Müh."<br />selectogrenci;<br />Sadece öğrencilerin adını sorgulamak için;<br />var bilMuhOgrencileri = from ogrenci in ogrenciler<br />whereogrenci.Bolum == "Bil. Müh."<br />select ogrenci.Adi;<br />
  45. 45. LINQ – {örnekler}<br />Aynı sorgu, isimler sıralı şekilde;<br />var bilMuhOgrencileri = from ogrenci in ogrenciler<br />whereogrenci.Bolum == "Bil. Müh."<br />orderbyogrenci.Adi ascending<br />selectogrenci;<br />Sorgu Sözdizimi <br />(Query Syntax/Query Expression Syntax)<br />Başka bir ifade ile;<br />var bilMuhOgrencileri = ogrenciler<br /> .Where(ogrenci => ogrenci.Bolum == "Bil. Müh.")<br /> .OrderBy(ogrenci => ogrenci.Adi)<br /> .Select(ogrenci => ogrenci);<br />Akıcı Sözdizimi (Fluent Syntax)<br />
  46. 46. LINQ – {örnekler}<br />Bir önceki örnekteki akıcı sözdizimini incelersek;<br />var bilMuhOgrencileri = ogrenciler<br /> .Where(ogrenci => ogrenci.Bolum == "Bil. Müh.")<br /> .OrderBy(ogrenci => ogrenci.Adi)<br /> .Select(ogrenci => ogrenci);<br />varfiltrelenmis = ogrenciler.Where(ogrenci=>ogrenci.Bolum=="Bil. Müh.");<br />varsiralanmıs = filtrelenmis.OrderBy(ogrenci => ogrenci.Adi);<br />varsorgu = siralanmıs.Select(ogrenci => ogrenci);<br />
  47. 47. LINQ – {örnekler}<br />Dış değişken kullanırken dikkati elden bırakmamalı;<br />int[] sayilar = { 9, 2, 0, 8, 6, 7, 5, 4, 1, 3 };<br />int limit = 5;<br />var sorgu = from sayi in sayilar<br />where sayi > limit<br />select sayi;<br />int[] limitUstuSayilara1 = sorgu.ToArray(); // 9, 8, 6, 7<br />limit = 3;<br />int[] limitUstuSayilara2 = sorgu.ToArray(); // 9, 8, 6, 7, 5, 4<br />
  48. 48. Threading<br />static void Main(string[] args) {<br />Thread t = newThread(EkranaYaz); <br /> t.Start();<br />for (int i = 0; i < 999; i++) {<br /> Console.Write("-");<br />}<br />}<br />private static void EkranaYaz() {<br />for (int i = 0; i < 999; i++) {<br /> Console.Write("*");<br /> }<br />}<br />Program çıktısı;<br />------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*****************************************************************************************<br />***********************************************----------------------------------------------------------------------------------------------------------------------------------------<br />
  49. 49. Threading<br />static void Main(string[] args) {<br />Thread t = newThread(EkranaYaz); <br /> t.Start();<br />for (int i = 0; i < 999; i++) {<br /> Console.Write("-");<br />}<br /> t.Join();<br />}<br />private static void EkranaYaz() {<br />for (int i = 0; i < 999; i++) {<br /> Console.Write("*");<br /> }<br />}<br />Başlatılan thread’in bitmesi beklenir<br />
  50. 50. Threading – {Veri geçisi}<br />public delegate void ThreadStart();<br />public delegate voidParameterizedThreadStart (objectobj);<br />static void Main(string[] args) {<br />Thread t = newThread(EkranaYaz); <br /> t.Start("*");<br />for (int i = 0; i < 999; i++) {<br /> Console.Write("-");<br />}<br /> t.Join();<br />}<br />private static void EkranaYaz(object mesaj) {<br />for (int i = 0; i < 999; i++) {<br /> Console.Write(mesaj as string);<br /> }<br />}<br />
  51. 51. Veritabanı<br />SqlConnection baglanti = newSqlConnection(@"Server=.SQLEXPRESS;Database=AdventureWorks;Trusted_Connection=Yes;");<br />baglanti.Open();<br />string sql = "SELECT TOP 100 Title, FirstName, MiddleName, LastName, EmailAddress FROM AdventureWorks.Person.Contact";<br />using(SqlDataAdapteradapter = newSqlDataAdapter(sql, baglanti)){<br /> DataTabledataTable = newDataTable();<br /> adapter.Fill(dataTable);<br /> foreach(DataRow row in dataTable.Rows) {<br />Console.WriteLine(string.Format("{0} {1} {2} {3} [{4}]",<br />row["Title"],<br />row["FirstName"],<br /> row["MiddleName"],<br />row["LastName"],<br />row["EmailAddress"]<br />));<br /> }<br />}<br />baglanti.Close();<br />
  52. 52. Teşekkürler<br />Fatih Boy<br />www.enterprisecoding.com<br />fatih@enterprisecoding.com<br />twitter.com/fatihboy<br />friendfeed.com/fatihboy<br />

×