1. C# 4.0 YenilikleriSefer Algan (Microsoft MVP)BT Akademi & Cronom: Kurucu Y旦neticisiC#nedir?com: Kurucu Edit旦r端E-Mail : sefer.algan@btakademi.com
2. AjandaDynamic Language RuntimeCLR olan ilikisiDynamic Anahtar S旦zc端端 ve C#Dinamik ifade yaz脹m脹DemoDinamik tipler(Expando,Entity vs) ve dierleri...Dier yeniliklerOpsiyonel ParametrelerNamed ParameterBCL 4.0 ile ne 脹kanlar
3. 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)
4. DLR Nedir?Dynamic Language Runtime (DLR):Dinamik diller i巽in ortak platformOperasyonlarda 束Dynamic binding損(runtime)Diller aras脹 entegrasyon?? IDynamicMetaObjectProvider protocol (IDMOP)
5. Neden 束Dinamik C#損 ?ncelikle, C# dinamik dil deildir!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..!
11. Sentaks Denemesi #1Dinamik operasyonu a巽脹kca belli etme:object d = GetDynamicObject();string result = ~(string)d~[d~.Length~- 1];Problem:B脹rrrr!
12. Sentaks Denemesi #2Dynamic context:object d = GetDynamicObject();string result = dynamic(d[d.Length - 1]);
13. Sentaks Denemesi #2Dynamic context:object d = GetDynamicObject();int index = GetIndex();string result = dynamic(d[index * 2]);
14. Sentaks Denemesi #2Dynamic context:object d = GetDynamicObject();int index = GetIndex();string result = dynamic(d[static(index * 2)]);Problem: Dinamiklik i巽inde statiklik? Takip zorluu
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. Herey dinamik deildir!
16. Sentaks Denemesi #3聴fade i巽ine dinamiklik izi b脹rakmakobject d = GetDynamicObject();int index = GetIndex();string result =dynamic(d)[index * 2];
17. Sentaks Denemesi #3聴fade i巽ine dinamiklik izi b脹rakmakobject d = GetDynamicObject();string result = d[dynamic(d).Length- 1];
18. Sentaks Denemesi #3聴fade i巽ine dinamiklik izi b脹rakmakobject d = GetDynamicObject();varlen = dynamic(d).Length;string result =d[dynamic(len)- 1];Problem: Dinamiklii nas脹l takip edeceiz?Atamalar aras脹nda ta脹nabilir mi?C#da zaten bu sistem var...
19. Sentaks Denemesi #4Dynamic Tip:dynamic d = GetDynamicObject();varlen = d.Length;string result =d[len- 1];Var, object, dynamic karmaas脹 ???????
20. Sentaks Denemesi #4Dynamic Tip:dynamic d = GetDynamicObject();int index = GetIndex();string result =d[index * 2];
21. 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 olduu belli olmuyor.
22. 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 ilemin dinamik olup olmad脹脹 bellidir.Daha doal kod yazma ve okuma salar. 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 dynamiciaretlemeCalculator 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
24. 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
25. Dier 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)
26. Runtime binder mevzusuC# runtime binder (Microsoft.CSharp.dll):Standart .NET nesneleri ile 巽al脹脹r (reflection!)Derleme aamas脹n脹 sim端le eder. (巽al脹ma zaman脹nda)IDynamicMetaObjectProvider aray端z端:DynamicObject implemenete eder.Object kendi Binding mekanizmas脹n脹 belirler.聴mplemente edilmemise C# Binder devreye girer.
27. Sonu巽: Dynamic kullan脹l脹 ve g端venlidirDinamik nesne modellerine 巽ok az kod yazarak eriirsiniz.Eski us端l ile yazmaya devam edebilirsiniz. Dynamic olmayan herey eski performans脹 ile 巽al脹脹r.Nerdeyse statik h脹z脹nda dinamizm elde edersiniz. (ruby ve javascript de olmad脹脹 kadar)Eer bir g端n 束Intellisense損 i 旦zelerseniz 巽ok fazla dinamik olmusunuzdur.
29. Dier 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;
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.