C# 4.0 YenilikleriSefer Algan (Microsoft MVP)BT Akademi & Cronom: Kurucu YöneticisiC#nedir?com: Kurucu EditörüE-Mail : sefer.algan@btakademi.com
AjandaDynamic Language RuntimeCLR olan ilişkisiDynamic  Anahtar Sözcüğü ve C#Dinamik ifade yazımıDemoDinamik tipler(Expando,Entity vs) ve diğerleri...Diğer yeniliklerOpsiyonel ParametrelerNamed ParameterBCL 4.0 ile Öne Çıkanlar
CLR Nedir?Common Language Runtime (CLR):Statik diller için ortak platform.Operasyonlar için Static binding (compile-time)Diller arası entegrasyonCommon Language Specification (CLS)
DLR Nedir?Dynamic Language Runtime (DLR):Dinamik diller için ortak platformOperasyonlarda «Dynamic binding»(runtime)Diller arası entegrasyon?? IDynamicMetaObjectProvider protocol (IDMOP)
Neden «Dinamik C#» ?Öncelikle, C# dinamik dil değildir!Ve olmayacak.Dinamik dünyaya C# ile adım atabilmek?Python gibi dinamik dillerde yazılmış kodları kullanmaHTML DOM gibi dinamik nesne modelleri ile rahat etmeCOM Arayüzleri (IDispatch) ile hızlı uyum..!
Dynamic Language RuntimeIronPythonIronRubyC#VB.NETDiğer Diller…Dynamic Language Runtimeİfade Ağaçları (Expressin Tree)Dynamic DispatchCall Site CachingPythonBinderRubyBinderCOMBinderDOMBinderObjectBinder
Terminoloji: Dynamic BindingBinding: Operasyonun anlamını çıkarmak (kullanılan öğelere bakarak)Static binding:Derleme zamanda tip  ayrımlarından yola çıkarak operasyonu belirlemeDynamic binding:Çalışma zamanında gerçek operasyonu tespit etme.
Dinamik Sentaks Nasıl Olabilir?1. Düşünce:Farklı olmalı!Tip güvenliği ön planda..!2. Düşünce:Benzer olmalı!Basit ve sade kod..
Dynamic: Beyin CimnastiğiAmaç:Dinamik bir koleksiyondan bir eleman almakStatic eşleniği:    string[] a = GetStringArray(…);    string result = a[a.Length– 1];
SentaksDenemesi #1Dinamik operasyonu açıkca belli etme:object d = GetDynamicObject(…);string result = d~[d~.Length- 1];
Sentaks Denemesi #1Dinamik operasyonu açıkca belli etme:object d = GetDynamicObject(…);string result = ~(string)d~[d~.Length~- 1];Problem:Bırrrr!
Sentaks Denemesi #2Dynamic context:object d = GetDynamicObject(…);string result = dynamic(d[d.Length - 1]);
Sentaks Denemesi #2Dynamic context:object d = GetDynamicObject(…);int index = GetIndex(…);string result = dynamic(d[index * 2]);
Sentaks Denemesi #2Dynamic context:object d = GetDynamicObject(…);int index = GetIndex(…);string result = dynamic(d[static(index * 2)]);Problem: Dinamiklik içinde statiklik?  Takip zorluğu
SentaksDenemesi #2Dynamic context:dynamic {    object d = static(GetDynamicObject(…));int index = static(GetIndex(…));    string result = d[static(index * 2)];}Problem: dinamik contex içerisinde küçük statik bloklar yazmak. Herşey dinamik değildir!
Sentaks Denemesi #3İfade içine dinamiklik izi bırakmakobject d = GetDynamicObject(…);int index = GetIndex(…);string result =dynamic(d)[index * 2];
Sentaks Denemesi #3İfade içine dinamiklik izi bırakmakobject d = GetDynamicObject(…);string result = d[dynamic(d).Length- 1];
Sentaks Denemesi #3İfade içine dinamiklik izi bırakmakobject d = GetDynamicObject(…);varlen = dynamic(d).Length;string result =d[dynamic(len)- 1];Problem: Dinamikliği nasıl takip edeceğiz?Atamalar arasında taşınabilir mi?C#’da zaten bu sistem var...
Sentaks Denemesi #4Dynamic Tip:dynamic d = GetDynamicObject(…);varlen = d.Length;string result =d[len- 1];Var, object, dynamic karmaşası ???????
Sentaks Denemesi #4Dynamic Tip:dynamic d = GetDynamicObject(…);int index = GetIndex(…);string result =d[index * 2];
Sentaks Denemesi #4Dynamic Tip:dynamic d = GetDynamicObject(…);string result = d[d.Length- 1];Avantaj: Fark Yok!Statik kod kadar kolay okunabilir ve niyet  açıkca belli edilir.DezAvantaj: Fark Yok!Lokal olarak kodun dinamik olduğu belli olmuyor.
Neden Güvenli?Sadece «dynamic»anahtar sözcüğü kullanılarak dynamic dispatch yapılıyor. Eski yapılar normal çalışmaya devam!IntelliSense statik çizgiyi destekler. Bir işlemin dinamik olup olmadığı bellidir.Daha doğal kod yazma ve okuma sağlar. Örnek : Silverlight JS, COM Binder, Reflection Binder vsdynamic CDrive = new FileSystemStorageObject(@"c:\\");var result = (CDrive.TestSub.File1.txt >> CDrive.TestSub.File2.txt);Kaynak : www.codeproject.com
‘Statik olarak dynamicişaretleme’Calculator calc = GetCalculator();int sum = calc.Add(10, 20);object calc = GetCalculator();TypecalcType = calc.GetType();object res = calcType.InvokeMember("Add",BindingFlags.InvokeMethod, null,newobject[] { 10, 20 });int sum = Convert.ToInt32(res);ScriptObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);Static olarak dynamic yapmadynamic calc = GetCalculator();int sum = calc.Add(10, 20);Dynamic method invocationDynamic conversion
Tip yadaTipBelirleyicisi?Tip Belirleyicisi:dynamic Foo d = GetDynamicFoo(…);Foo üyelerini Static bind et.Kalanı dinmaik bind et.Tip :dynamic d = GetDynamicFoo(…);Bütün üyeleri dinamik bind et.Tip «Object» olsa bile
Diğer Dinamik İfadeler;Dynamic type:Method call    		Math.Abs(d)Invocationd("Hello")Member access		d.LengthOperator application	d + 4Indexing			d["Hello"]Static type:Conversions			(double)dObject creation		newFoo(d)
Runtime binder mevzusuC# runtime binder (Microsoft.CSharp.dll):Standart .NET nesneleri ile çalışır (reflection!)Derleme aşamasını simüle eder. (çalışma zamanında)IDynamicMetaObjectProvider arayüzü:DynamicObject  implemenete eder.Object kendi Binding mekanizmasını belirler.İmplemente edilmemişse C# Binder devreye girer.
Sonuç: Dynamic kullanışlı ve güvenlidirDinamik nesne modellerine çok az kod yazarak erişirsiniz.Eski usül ile yazmaya devam edebilirsiniz. Dynamic olmayan herşey eski performansı ile çalışır.Nerdeyse statik hızında dinamizm elde edersiniz. (ruby ve javascript de olmadığı kadar)Eğer bir gün «Intellisense» i özelerseniz çok fazla dinamik olmuşsunuzdur.
Dinamik Nesneler İle Çalışmakdemo
Diğer Dil YenilikleriOpsiyonel Parametrelervoid Deneme (int a, char c=‘X’);İsimlendirilmiş ParametrelerDeneme(c:’B’,  a : 5);Generic Koleksiyonlarda «Co» ve «Contra» varianceList<int>   a=  ...List<object> b = ...b=a;
BCL Yeniliklerinden Öne ÇıkanlarCode ContractsParallel Extensions (task parallel library,plinq)System.Numeric (BigInteger, Complex) (F#?)MemoryMappedFile (büyük dosyalar, interprocesscommunication-ipc-)System.Tuple<T1,T2,T3.....>varsonuc= Tuple.Create("ahmet", 5, 'c', 3.4);SortedSet (self-balancing tree, performans!)FileSystem Enumeration (IEnumarable<FileInfo>)In Process-Side By Side CLR
soru & cevap© 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.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.

C#4.0

  • 1.
    C# 4.0 YenilikleriSeferAlgan (Microsoft MVP)BT Akademi & Cronom: Kurucu YöneticisiC#nedir?com: Kurucu EditörüE-Mail : sefer.algan@btakademi.com
  • 2.
    AjandaDynamic Language RuntimeCLRolan ilişkisiDynamic Anahtar Sözcüğü ve C#Dinamik ifade yazımıDemoDinamik tipler(Expando,Entity vs) ve diğerleri...Diğer yeniliklerOpsiyonel ParametrelerNamed ParameterBCL 4.0 ile Öne Çıkanlar
  • 3.
    CLR Nedir?Common LanguageRuntime (CLR):Statik diller için ortak platform.Operasyonlar için Static binding (compile-time)Diller arası entegrasyonCommon Language Specification (CLS)
  • 4.
    DLR Nedir?Dynamic LanguageRuntime (DLR):Dinamik diller için ortak platformOperasyonlarda «Dynamic binding»(runtime)Diller arası entegrasyon?? IDynamicMetaObjectProvider protocol (IDMOP)
  • 5.
    Neden «Dinamik C#»?Öncelikle, C# dinamik dil değildir!Ve olmayacak.Dinamik dünyaya C# ile adım atabilmek?Python gibi dinamik dillerde yazılmış kodları kullanmaHTML DOM gibi dinamik nesne modelleri ile rahat etmeCOM Arayüzleri (IDispatch) ile hızlı uyum..!
  • 6.
    Dynamic Language RuntimeIronPythonIronRubyC#VB.NETDiğerDiller…Dynamic Language Runtimeİfade Ağaçları (Expressin Tree)Dynamic DispatchCall Site CachingPythonBinderRubyBinderCOMBinderDOMBinderObjectBinder
  • 7.
    Terminoloji: Dynamic BindingBinding:Operasyonun anlamını çıkarmak (kullanılan öğelere bakarak)Static binding:Derleme zamanda tip ayrımlarından yola çıkarak operasyonu belirlemeDynamic binding:Çalışma zamanında gerçek operasyonu tespit etme.
  • 8.
    Dinamik Sentaks NasılOlabilir?1. Düşünce:Farklı olmalı!Tip güvenliği ön planda..!2. Düşünce:Benzer olmalı!Basit ve sade kod..
  • 9.
    Dynamic: Beyin CimnastiğiAmaç:Dinamikbir koleksiyondan bir eleman almakStatic eşleniği: string[] a = GetStringArray(…); string result = a[a.Length– 1];
  • 10.
    SentaksDenemesi #1Dinamik operasyonuaçıkca belli etme:object d = GetDynamicObject(…);string result = d~[d~.Length- 1];
  • 11.
    Sentaks Denemesi #1Dinamikoperasyonu açıkca belli etme:object d = GetDynamicObject(…);string result = ~(string)d~[d~.Length~- 1];Problem:Bırrrr!
  • 12.
    Sentaks Denemesi #2Dynamiccontext:object d = GetDynamicObject(…);string result = dynamic(d[d.Length - 1]);
  • 13.
    Sentaks Denemesi #2Dynamiccontext:object d = GetDynamicObject(…);int index = GetIndex(…);string result = dynamic(d[index * 2]);
  • 14.
    Sentaks Denemesi #2Dynamiccontext:object d = GetDynamicObject(…);int index = GetIndex(…);string result = dynamic(d[static(index * 2)]);Problem: Dinamiklik içinde statiklik? Takip zorluğu
  • 15.
    SentaksDenemesi #2Dynamic context:dynamic{ object d = static(GetDynamicObject(…));int index = static(GetIndex(…)); string result = d[static(index * 2)];}Problem: dinamik contex içerisinde küçük statik bloklar yazmak. Herşey dinamik değildir!
  • 16.
    Sentaks Denemesi #3İfadeiçine dinamiklik izi bırakmakobject d = GetDynamicObject(…);int index = GetIndex(…);string result =dynamic(d)[index * 2];
  • 17.
    Sentaks Denemesi #3İfadeiçine dinamiklik izi bırakmakobject d = GetDynamicObject(…);string result = d[dynamic(d).Length- 1];
  • 18.
    Sentaks Denemesi #3İfadeiçine dinamiklik izi bırakmakobject d = GetDynamicObject(…);varlen = dynamic(d).Length;string result =d[dynamic(len)- 1];Problem: Dinamikliği nasıl takip edeceğiz?Atamalar arasında taşınabilir mi?C#’da zaten bu sistem var...
  • 19.
    Sentaks Denemesi #4DynamicTip:dynamic d = GetDynamicObject(…);varlen = d.Length;string result =d[len- 1];Var, object, dynamic karmaşası ???????
  • 20.
    Sentaks Denemesi #4DynamicTip:dynamic d = GetDynamicObject(…);int index = GetIndex(…);string result =d[index * 2];
  • 21.
    Sentaks Denemesi #4DynamicTip:dynamic d = GetDynamicObject(…);string result = d[d.Length- 1];Avantaj: Fark Yok!Statik kod kadar kolay okunabilir ve niyet açıkca belli edilir.DezAvantaj: Fark Yok!Lokal olarak kodun dinamik olduğu belli olmuyor.
  • 22.
    Neden Güvenli?Sadece «dynamic»anahtarsözcüğü kullanılarak dynamic dispatch yapılıyor. Eski yapılar normal çalışmaya devam!IntelliSense statik çizgiyi destekler. Bir işlemin dinamik olup olmadığı bellidir.Daha doğal kod yazma ve okuma sağlar. Örnek : Silverlight JS, COM Binder, Reflection Binder vsdynamic CDrive = new FileSystemStorageObject(@"c:\\");var result = (CDrive.TestSub.File1.txt >> CDrive.TestSub.File2.txt);Kaynak : www.codeproject.com
  • 23.
    ‘Statik olarak dynamicişaretleme’Calculatorcalc = GetCalculator();int sum = calc.Add(10, 20);object calc = GetCalculator();TypecalcType = calc.GetType();object res = calcType.InvokeMember("Add",BindingFlags.InvokeMethod, null,newobject[] { 10, 20 });int sum = Convert.ToInt32(res);ScriptObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);Static olarak dynamic yapmadynamic calc = GetCalculator();int sum = calc.Add(10, 20);Dynamic method invocationDynamic conversion
  • 24.
    Tip yadaTipBelirleyicisi?Tip Belirleyicisi:dynamicFoo d = GetDynamicFoo(…);Foo üyelerini Static bind et.Kalanı dinmaik bind et.Tip :dynamic d = GetDynamicFoo(…);Bütün üyeleri dinamik bind et.Tip «Object» olsa bile
  • 25.
    Diğer Dinamik İfadeler;Dynamictype:Method call Math.Abs(d)Invocationd("Hello")Member access d.LengthOperator application d + 4Indexing d["Hello"]Static type:Conversions (double)dObject creation newFoo(d)
  • 26.
    Runtime binder mevzusuC#runtime binder (Microsoft.CSharp.dll):Standart .NET nesneleri ile çalışır (reflection!)Derleme aşamasını simüle eder. (çalışma zamanında)IDynamicMetaObjectProvider arayüzü:DynamicObject implemenete eder.Object kendi Binding mekanizmasını belirler.İmplemente edilmemişse C# Binder devreye girer.
  • 27.
    Sonuç: Dynamic kullanışlıve güvenlidirDinamik nesne modellerine çok az kod yazarak erişirsiniz.Eski usül ile yazmaya devam edebilirsiniz. Dynamic olmayan herşey eski performansı ile çalışır.Nerdeyse statik hızında dinamizm elde edersiniz. (ruby ve javascript de olmadığı kadar)Eğer bir gün «Intellisense» i özelerseniz çok fazla dinamik olmuşsunuzdur.
  • 28.
    Dinamik Nesneler İleÇalışmakdemo
  • 29.
    Diğer Dil YenilikleriOpsiyonelParametrelervoid Deneme (int a, char c=‘X’);İsimlendirilmiş ParametrelerDeneme(c:’B’, a : 5);Generic Koleksiyonlarda «Co» ve «Contra» varianceList<int> a= ...List<object> b = ...b=a;
  • 30.
    BCL Yeniliklerinden ÖneÇıkanlarCode ContractsParallel Extensions (task parallel library,plinq)System.Numeric (BigInteger, Complex) (F#?)MemoryMappedFile (büyük dosyalar, interprocesscommunication-ipc-)System.Tuple<T1,T2,T3.....>varsonuc= Tuple.Create("ahmet", 5, 'c', 3.4);SortedSet (self-balancing tree, performans!)FileSystem Enumeration (IEnumarable<FileInfo>)In Process-Side By Side CLR
  • 31.
    soru & cevap©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.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.