C#4.0
Upcoming SlideShare
Loading in...5
×
 

C#4.0

on

  • 1,756 views

 

Statistics

Views

Total Views
1,756
Views on SlideShare
1,678
Embed Views
78

Actions

Likes
0
Downloads
19
Comments
0

3 Embeds 78

http://maviseffaf.blogspot.com 72
http://www.slideshare.net 5
http://maviseffaf.blogspot.tw 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    C#4.0 C#4.0 Presentation Transcript

    • C# 4.0 Yenilikleri
      Sefer Algan (Microsoft MVP)
      BT Akademi & Cronom: Kurucu Yöneticisi
      C#nedir?com: Kurucu Editörü
      E-Mail : sefer.algan@btakademi.com
    • Ajanda
      Dynamic Language Runtime
      CLR olan ilişkisi
      Dynamic Anahtar Sözcüğü ve C#
      Dinamik ifade yazımı
      Demo
      Dinamik tipler(Expando,Entity vs) ve diğerleri...
      Diğer yenilikler
      Opsiyonel Parametreler
      Named Parameter
      BCL 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 platform
      Operasyonlarda «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ı kullanma
      HTML DOM gibi dinamik nesne modelleri ile rahat etme
      COM Arayüzleri (IDispatch) ile hızlı uyum..!
    • Dynamic Language Runtime
      IronPython
      IronRuby
      C#
      VB.NET
      Diğer Diller…
      Dynamic Language Runtime
      İfade Ağaçları (Expressin Tree)
      Dynamic Dispatch
      Call Site Caching
      PythonBinder
      RubyBinder
      COMBinder
      DOMBinder
      ObjectBinder
    • Terminoloji: Dynamic Binding
      Binding: Operasyonun anlamını çıkarmak (kullanılan öğelere bakarak)
      Static binding:Derleme zamanda tip ayrımlarından yola çıkarak operasyonu belirleme
      Dynamic 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ği
      Amaç:
      Dinamik bir koleksiyondan bir eleman almak
      Static eşleniği:
      string[] a = GetStringArray(…);
      string result = a[a.Length– 1];
    • SentaksDenemesi #1
      Dinamik operasyonu açıkca belli etme:
      object d = GetDynamicObject(…);
      string result = d~[d~.Length- 1];
    • Sentaks Denemesi #1
      Dinamik operasyonu açıkca belli etme:
      object d = GetDynamicObject(…);
      string result = ~(string)d~[d~.Length~- 1];
      Problem:Bırrrr!

    • Sentaks Denemesi #2
      Dynamic context:
      object d = GetDynamicObject(…);
      string result = dynamic(d[d.Length - 1]);
    • Sentaks Denemesi #2
      Dynamic context:
      object d = GetDynamicObject(…);
      int index = GetIndex(…);
      string result = dynamic(d[index * 2]);
    • Sentaks Denemesi #2
      Dynamic context:
      object d = GetDynamicObject(…);
      int index = GetIndex(…);
      string result = dynamic(d[static(index * 2)]);
      Problem: Dinamiklik içinde statiklik? Takip zorluğu

    • SentaksDenemesi #2
      Dynamic 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ırakmak
      object d = GetDynamicObject(…);
      int index = GetIndex(…);
      string result =dynamic(d)[index * 2];
    • Sentaks Denemesi #3
      İfade içine dinamiklik izi bırakmak
      object d = GetDynamicObject(…);
      string result = d[dynamic(d).Length- 1];
    • Sentaks Denemesi #3
      İfade içine dinamiklik izi bırakmak
      object 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 #4
      Dynamic Tip:
      dynamic d = GetDynamicObject(…);
      varlen = d.Length;
      string result =d[len- 1];
      Var, object, dynamic karmaşası ???????
    • Sentaks Denemesi #4
      Dynamic Tip:
      dynamic d = GetDynamicObject(…);
      int index = GetIndex(…);
      string result =d[index * 2];
    • Sentaks Denemesi #4
      Dynamic 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 vs
      dynamic CDrive = new FileSystemStorageObject(@"c:quot;);
      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 yapma
      dynamic calc = GetCalculator();
      int sum = calc.Add(10, 20);
      Dynamic method invocation
      Dynamic 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.Length
      Operator application d + 4
      Indexing d["Hello"]
      Static type:
      Conversions (double)d
      Object creation newFoo(d)
    • Runtime binder mevzusu
      C# 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üvenlidir
      Dinamik 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ışmak
      demo
    • Diğer Dil Yenilikleri
      Opsiyonel Parametreler
      void Deneme (int a, char c=‘X’);
      İsimlendirilmiş Parametreler
      Deneme(c:’B’, a : 5);
      Generic Koleksiyonlarda «Co» ve «Contra» variance
      List<int> a= ...List<object> b = ...b=a;
    • BCL Yeniliklerinden Öne Çıkanlar
      Code Contracts
      Parallel 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.