C# 4.0 Yenilikleri<br />Sefer Algan (Microsoft MVP)<br />BT Akademi & Cronom: Kurucu Yöneticisi<br />C#nedir?com: Kurucu E...
Ajanda<br />Dynamic Language Runtime<br />CLR olan ilişkisi<br />Dynamic  Anahtar Sözcüğü ve C#<br />Dinamik ifade yazımı<...
CLR Nedir?<br />Common Language Runtime (CLR):<br />Statik diller için ortak platform.<br />Operasyonlar için Static bindi...
DLR Nedir?<br />Dynamic Language Runtime (DLR):<br />Dinamik diller için ortak platform<br />Operasyonlarda «Dynamic bindi...
Neden «Dinamik C#» ?<br />Öncelikle, C# dinamik dil değildir!<br />Ve olmayacak.<br />Dinamik dünyaya C# ile adım atabilm...
Dynamic Language Runtime<br />IronPython<br />IronRuby<br />C#<br />VB.NET<br />Diğer Diller…<br />Dynamic Language Runtim...
Terminoloji: Dynamic Binding<br />Binding: Operasyonun anlamını çıkarmak (kullanılan öğelere bakarak)<br />Static binding:...
Dinamik Sentaks Nasıl Olabilir?<br />1. Düşünce:Farklı olmalı!<br />Tip güvenliği ön planda..!<br />2. Düşünce:Benzer olma...
Dynamic: Beyin Cimnastiği<br />Amaç:<br />Dinamik bir koleksiyondan bir eleman almak<br />Static eşleniği:<br />    string...
SentaksDenemesi #1<br />Dinamik operasyonu açıkca belli etme:<br />object d = GetDynamicObject(…);<br />string result = d~...
Sentaks Denemesi #1<br />Dinamik operasyonu açıkca belli etme:<br />object d = GetDynamicObject(…);<br />string result = ~...
Sentaks Denemesi #2<br />Dynamic context:<br />object d = GetDynamicObject(…);<br />string result = dynamic(d[d.Length - 1...
Sentaks Denemesi #2<br />Dynamic context:<br />object d = GetDynamicObject(…);<br />int index = GetIndex(…);<br />string r...
Sentaks Denemesi #2<br />Dynamic context:<br />object d = GetDynamicObject(…);<br />int index = GetIndex(…);<br />string r...
SentaksDenemesi #2<br />Dynamic context:<br />dynamic {<br />    object d = static(GetDynamicObject(…));<br />int index = ...
Sentaks Denemesi #3<br />İfade içine dinamiklik izi bırakmak<br />object d = GetDynamicObject(…);<br />int index = GetInde...
Sentaks Denemesi #3<br />İfade içine dinamiklik izi bırakmak<br />object d = GetDynamicObject(…);<br />string result = d[d...
Sentaks Denemesi #3<br />İfade içine dinamiklik izi bırakmak<br />object d = GetDynamicObject(…);<br />varlen = dynamic(d)...
Sentaks Denemesi #4<br />Dynamic Tip:<br />dynamic d = GetDynamicObject(…);<br />varlen = d.Length;<br />string result =d[...
Sentaks Denemesi #4<br />Dynamic Tip:<br />dynamic d = GetDynamicObject(…);<br />int index = GetIndex(…);<br />string resu...
Sentaks Denemesi #4<br />Dynamic Tip:<br />dynamic d = GetDynamicObject(…);<br />string result = d[d.Length- 1];<br />Avan...
Neden Güvenli?<br />Sadece «dynamic»anahtar sözcüğü kullanılarak dynamic dispatch yapılıyor. Eski yapılar normal çalışmaya...
‘Statik olarak dynamicişaretleme’<br />Calculator calc = GetCalculator();<br />int sum = calc.Add(10, 20);<br />object cal...
Tip yadaTipBelirleyicisi?<br />Tip Belirleyicisi:<br />dynamic Foo d = GetDynamicFoo(…);<br />Foo üyelerini Static bind et...
Diğer Dinamik İfadeler;<br />Dynamic type:<br />Method call    		Math.Abs(d)<br />Invocationd("Hello")<br />Member access	...
Runtime binder mevzusu<br />C# runtime binder (Microsoft.CSharp.dll):<br />Standart .NET nesneleri ile çalışır (reflection...
Sonuç: Dynamic kullanışlı ve güvenlidir<br />Dinamik nesne modellerine çok az kod yazarak erişirsiniz.<br />Eski usül ile ...
Dinamik Nesneler İle Çalışmak<br />demo<br />
Diğer Dil Yenilikleri<br />Opsiyonel Parametreler<br />void Deneme (int a, char c=‘X’);<br />İsimlendirilmiş Parametreler<...
BCL Yeniliklerinden Öne Çıkanlar<br />Code Contracts<br />Parallel Extensions (task parallel library,plinq)<br />System.Nu...
soru & cevap<br />© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product n...
Upcoming SlideShare
Loading in …5
×

C#4.0

1,557 views
1,431 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,557
On SlideShare
0
From Embeds
0
Number of Embeds
81
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

C#4.0

  1. 1. C# 4.0 Yenilikleri<br />Sefer Algan (Microsoft MVP)<br />BT Akademi & Cronom: Kurucu Yöneticisi<br />C#nedir?com: Kurucu Editörü<br />E-Mail : sefer.algan@btakademi.com<br />
  2. 2. Ajanda<br />Dynamic Language Runtime<br />CLR olan ilişkisi<br />Dynamic Anahtar Sözcüğü ve C#<br />Dinamik ifade yazımı<br />Demo<br />Dinamik tipler(Expando,Entity vs) ve diğerleri...<br />Diğer yenilikler<br />Opsiyonel Parametreler<br />Named Parameter<br />BCL 4.0 ile Öne Çıkanlar<br />
  3. 3. CLR Nedir?<br />Common Language Runtime (CLR):<br />Statik diller için ortak platform.<br />Operasyonlar için Static binding (compile-time)<br />Diller arası entegrasyonCommon Language Specification (CLS)<br />
  4. 4. DLR Nedir?<br />Dynamic Language Runtime (DLR):<br />Dinamik diller için ortak platform<br />Operasyonlarda «Dynamic binding»(runtime)<br />Diller arası entegrasyon?? IDynamicMetaObjectProvider protocol (IDMOP)<br />
  5. 5. Neden «Dinamik C#» ?<br />Öncelikle, C# dinamik dil değildir!<br />Ve olmayacak.<br />Dinamik dünyaya C# ile adım atabilmek?<br />Python gibi dinamik dillerde yazılmış kodları kullanma<br />HTML DOM gibi dinamik nesne modelleri ile rahat etme<br />COM Arayüzleri (IDispatch) ile hızlı uyum..!<br />
  6. 6. Dynamic Language Runtime<br />IronPython<br />IronRuby<br />C#<br />VB.NET<br />Diğer Diller…<br />Dynamic Language Runtime<br />İfade Ağaçları (Expressin Tree)<br />Dynamic Dispatch<br />Call Site Caching<br />PythonBinder<br />RubyBinder<br />COMBinder<br />DOMBinder<br />ObjectBinder<br />
  7. 7. Terminoloji: Dynamic Binding<br />Binding: Operasyonun anlamını çıkarmak (kullanılan öğelere bakarak)<br />Static binding:Derleme zamanda tip ayrımlarından yola çıkarak operasyonu belirleme<br />Dynamic binding:Çalışma zamanında gerçek operasyonu tespit etme.<br />
  8. 8. Dinamik Sentaks Nasıl Olabilir?<br />1. Düşünce:Farklı olmalı!<br />Tip güvenliği ön planda..!<br />2. Düşünce:Benzer olmalı!<br />Basit ve sade kod..<br />
  9. 9. Dynamic: Beyin Cimnastiği<br />Amaç:<br />Dinamik bir koleksiyondan bir eleman almak<br />Static eşleniği:<br /> string[] a = GetStringArray(…);<br /> string result = a[a.Length– 1];<br />
  10. 10. SentaksDenemesi #1<br />Dinamik operasyonu açıkca belli etme:<br />object d = GetDynamicObject(…);<br />string result = d~[d~.Length- 1];<br />
  11. 11. Sentaks Denemesi #1<br />Dinamik operasyonu açıkca belli etme:<br />object d = GetDynamicObject(…);<br />string result = ~(string)d~[d~.Length~- 1];<br />Problem:Bırrrr!<br /><br />
  12. 12. Sentaks Denemesi #2<br />Dynamic context:<br />object d = GetDynamicObject(…);<br />string result = dynamic(d[d.Length - 1]);<br />
  13. 13. Sentaks Denemesi #2<br />Dynamic context:<br />object d = GetDynamicObject(…);<br />int index = GetIndex(…);<br />string result = dynamic(d[index * 2]);<br />
  14. 14. Sentaks Denemesi #2<br />Dynamic context:<br />object d = GetDynamicObject(…);<br />int index = GetIndex(…);<br />string result = dynamic(d[static(index * 2)]);<br />Problem: Dinamiklik içinde statiklik? Takip zorluğu<br /><br />
  15. 15. SentaksDenemesi #2<br />Dynamic context:<br />dynamic {<br /> object d = static(GetDynamicObject(…));<br />int index = static(GetIndex(…));<br /> string result = d[static(index * 2)];<br />}<br />Problem: dinamik contex içerisinde küçük statik bloklar yazmak. Herşey dinamik değildir!<br /><br />
  16. 16. Sentaks Denemesi #3<br />İfade içine dinamiklik izi bırakmak<br />object d = GetDynamicObject(…);<br />int index = GetIndex(…);<br />string result =dynamic(d)[index * 2];<br />
  17. 17. Sentaks Denemesi #3<br />İfade içine dinamiklik izi bırakmak<br />object d = GetDynamicObject(…);<br />string result = d[dynamic(d).Length- 1];<br />
  18. 18. Sentaks Denemesi #3<br />İfade içine dinamiklik izi bırakmak<br />object d = GetDynamicObject(…);<br />varlen = dynamic(d).Length;<br />string result =d[dynamic(len)- 1];<br />Problem: Dinamikliği nasıl takip edeceğiz?<br />Atamalar arasında taşınabilir mi?<br />C#’da zaten bu sistem var...<br /><br />
  19. 19. Sentaks Denemesi #4<br />Dynamic Tip:<br />dynamic d = GetDynamicObject(…);<br />varlen = d.Length;<br />string result =d[len- 1];<br />Var, object, dynamic karmaşası ???????<br />
  20. 20. Sentaks Denemesi #4<br />Dynamic Tip:<br />dynamic d = GetDynamicObject(…);<br />int index = GetIndex(…);<br />string result =d[index * 2];<br />
  21. 21. Sentaks Denemesi #4<br />Dynamic Tip:<br />dynamic d = GetDynamicObject(…);<br />string result = d[d.Length- 1];<br />Avantaj: Fark Yok!<br />Statik kod kadar kolay okunabilir ve niyet açıkca belli edilir.<br />DezAvantaj: Fark Yok!<br />Lokal olarak kodun dinamik olduğu belli olmuyor.<br /><br />
  22. 22. Neden Güvenli?<br />Sadece «dynamic»anahtar sözcüğü kullanılarak dynamic dispatch yapılıyor. Eski yapılar normal çalışmaya devam!<br />IntelliSense statik çizgiyi destekler. Bir işlemin dinamik olup olmadığı bellidir.<br />Daha doğal kod yazma ve okuma sağlar. Örnek : Silverlight JS, COM Binder, Reflection Binder vs<br />dynamic CDrive = new FileSystemStorageObject(@"c:quot;);<br />var result = (CDrive.TestSub.File1.txt >> CDrive.TestSub.File2.txt);Kaynak : www.codeproject.com<br />
  23. 23. ‘Statik olarak dynamicişaretleme’<br />Calculator calc = GetCalculator();<br />int sum = calc.Add(10, 20);<br />object calc = GetCalculator();<br />TypecalcType = calc.GetType();<br />object res = calcType.InvokeMember("Add",<br />BindingFlags.InvokeMethod, null,<br />newobject[] { 10, 20 });<br />int sum = Convert.ToInt32(res);<br />ScriptObject calc = GetCalculator();<br />object res = calc.Invoke("Add", 10, 20);<br />int sum = Convert.ToInt32(res);<br />Static olarak dynamic yapma<br />dynamic calc = GetCalculator();<br />int sum = calc.Add(10, 20);<br />Dynamic method invocation<br />Dynamic conversion<br />
  24. 24. Tip yadaTipBelirleyicisi?<br />Tip Belirleyicisi:<br />dynamic Foo d = GetDynamicFoo(…);<br />Foo üyelerini Static bind et.<br />Kalanı dinmaik bind et.<br />Tip :<br />dynamic d = GetDynamicFoo(…);<br />Bütün üyeleri dinamik bind et.<br />Tip «Object» olsa bile<br /><br /><br />
  25. 25. Diğer Dinamik İfadeler;<br />Dynamic type:<br />Method call Math.Abs(d)<br />Invocationd("Hello")<br />Member access d.Length<br />Operator application d + 4<br />Indexing d["Hello"]<br />Static type:<br />Conversions (double)d<br />Object creation newFoo(d)<br />
  26. 26. Runtime binder mevzusu<br />C# runtime binder (Microsoft.CSharp.dll):<br />Standart .NET nesneleri ile çalışır (reflection!)<br />Derleme aşamasını simüle eder. (çalışma zamanında)<br />IDynamicMetaObjectProvider arayüzü:<br />DynamicObject implemenete eder.<br />Object kendi Binding mekanizmasını belirler.<br />İmplemente edilmemişse C# Binder devreye girer.<br />
  27. 27. Sonuç: Dynamic kullanışlı ve güvenlidir<br />Dinamik nesne modellerine çok az kod yazarak erişirsiniz.<br />Eski usül ile yazmaya devam edebilirsiniz. Dynamic olmayan herşey eski performansı ile çalışır.<br />Nerdeyse statik hızında dinamizm elde edersiniz. (ruby ve javascript de olmadığı kadar)<br />Eğer bir gün «Intellisense» i özelerseniz çok fazla dinamik olmuşsunuzdur.<br />
  28. 28. Dinamik Nesneler İle Çalışmak<br />demo<br />
  29. 29. Diğer Dil Yenilikleri<br />Opsiyonel Parametreler<br />void Deneme (int a, char c=‘X’);<br />İsimlendirilmiş Parametreler<br />Deneme(c:’B’, a : 5);<br />Generic Koleksiyonlarda «Co» ve «Contra» variance<br />List<int> a= ...List<object> b = ...b=a;<br />
  30. 30. BCL Yeniliklerinden Öne Çıkanlar<br />Code Contracts<br />Parallel Extensions (task parallel library,plinq)<br />System.Numeric (BigInteger, Complex) (F#?)<br />MemoryMappedFile (büyük dosyalar, interprocesscommunication-ipc-)<br />System.Tuple<T1,T2,T3.....><br />varsonuc= Tuple.Create("ahmet", 5, 'c', 3.4);<br />SortedSet (self-balancing tree, performans!)<br />FileSystem Enumeration (IEnumarable<FileInfo>)<br />In Process-Side By Side CLR<br />
  31. 31. soru & cevap<br />© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.<br />The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.<br />

×