SlideShare ist ein Scribd-Unternehmen logo
1 von 31
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:"); 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.

Weitere ähnliche Inhalte

Andere mochten auch

Spring traditions in Slovakia
Spring traditions in SlovakiaSpring traditions in Slovakia
Spring traditions in SlovakiaHelena Repaská
 
Reading Mission Control Data out of Predator Drone video feeds
Reading Mission Control Data out of Predator Drone video feedsReading Mission Control Data out of Predator Drone video feeds
Reading Mission Control Data out of Predator Drone video feedsguest6f8d6602
 
Final international program
Final international programFinal international program
Final international programHelena Repaská
 
Tecnologianaescola
TecnologianaescolaTecnologianaescola
Tecnologianaescolatchristina33
 
Apresentação teleconferência de resultados 1 t10
Apresentação   teleconferência de resultados 1 t10Apresentação   teleconferência de resultados 1 t10
Apresentação teleconferência de resultados 1 t10Braskem_RI
 
Seminario internacional walmart s inah(1)
Seminario internacional walmart s inah(1)Seminario internacional walmart s inah(1)
Seminario internacional walmart s inah(1)editorh
 

Andere mochten auch (14)

Our team We want
Our team We wantOur team We want
Our team We want
 
Exchange visits
Exchange visitsExchange visits
Exchange visits
 
Our favorite books
Our favorite booksOur favorite books
Our favorite books
 
Spring traditions in Slovakia
Spring traditions in SlovakiaSpring traditions in Slovakia
Spring traditions in Slovakia
 
Our favourite book 1
Our favourite book 1Our favourite book 1
Our favourite book 1
 
Reading Mission Control Data out of Predator Drone video feeds
Reading Mission Control Data out of Predator Drone video feedsReading Mission Control Data out of Predator Drone video feeds
Reading Mission Control Data out of Predator Drone video feeds
 
1st project day
1st project day1st project day
1st project day
 
Final international program
Final international programFinal international program
Final international program
 
Radiation
RadiationRadiation
Radiation
 
Slovak painters ..
Slovak painters ..Slovak painters ..
Slovak painters ..
 
Tecnologianaescola
TecnologianaescolaTecnologianaescola
Tecnologianaescola
 
Base de datos
Base de datosBase de datos
Base de datos
 
Apresentação teleconferência de resultados 1 t10
Apresentação   teleconferência de resultados 1 t10Apresentação   teleconferência de resultados 1 t10
Apresentação teleconferência de resultados 1 t10
 
Seminario internacional walmart s inah(1)
Seminario internacional walmart s inah(1)Seminario internacional walmart s inah(1)
Seminario internacional walmart s inah(1)
 

Ähnlich wie C#4.0

C sharp-egitim-cd-si
C sharp-egitim-cd-siC sharp-egitim-cd-si
C sharp-egitim-cd-sisersld30
 
C sharp-indir
C sharp-indirC sharp-indir
C sharp-indirsersld30
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri TanıtımAtilla Özgür
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008mtcakmak
 
C sharp-video
C sharp-videoC sharp-video
C sharp-videosersld30
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumanisersld30
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedirbykezza
 
C sharp-egitimi-pendik
C sharp-egitimi-pendikC sharp-egitimi-pendik
C sharp-egitimi-pendiksersld30
 
C sharp-testi
C sharp-testiC sharp-testi
C sharp-testisersld30
 
C sharp-zirvesi
C sharp-zirvesiC sharp-zirvesi
C sharp-zirvesisersld30
 
C sharp-cevaplari
C sharp-cevaplariC sharp-cevaplari
C sharp-cevaplarisersld30
 
Bilgisayar mühendisi ne iş yapar (üniversite adayları için)
Bilgisayar mühendisi ne iş yapar (üniversite adayları için)Bilgisayar mühendisi ne iş yapar (üniversite adayları için)
Bilgisayar mühendisi ne iş yapar (üniversite adayları için)alinizam99
 
C sharp-videolari
C sharp-videolariC sharp-videolari
C sharp-videolarisersld30
 
C sharp-odevi
C sharp-odeviC sharp-odevi
C sharp-odevisersld30
 
C sharp-konferansi
C sharp-konferansiC sharp-konferansi
C sharp-konferansisersld30
 
C sharp-proje
C sharp-projeC sharp-proje
C sharp-projesersld30
 

Ähnlich wie C#4.0 (20)

C sharp-egitim-cd-si
C sharp-egitim-cd-siC sharp-egitim-cd-si
C sharp-egitim-cd-si
 
C# 4 0 New Features
C# 4 0   New FeaturesC# 4 0   New Features
C# 4 0 New Features
 
Visual C# 4.0
Visual C# 4.0Visual C# 4.0
Visual C# 4.0
 
C sharp-indir
C sharp-indirC sharp-indir
C sharp-indir
 
C# 4.0 new features - innova
C# 4.0   new features - innovaC# 4.0   new features - innova
C# 4.0 new features - innova
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri Tanıtım
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
 
C sharp-video
C sharp-videoC sharp-video
C sharp-video
 
C sharp-dokumani
C sharp-dokumaniC sharp-dokumani
C sharp-dokumani
 
Csharpnedir
CsharpnedirCsharpnedir
Csharpnedir
 
C sharp-egitimi-pendik
C sharp-egitimi-pendikC sharp-egitimi-pendik
C sharp-egitimi-pendik
 
C sharp-testi
C sharp-testiC sharp-testi
C sharp-testi
 
C sharp-zirvesi
C sharp-zirvesiC sharp-zirvesi
C sharp-zirvesi
 
C sharp-cevaplari
C sharp-cevaplariC sharp-cevaplari
C sharp-cevaplari
 
Bilgisayar mühendisi ne iş yapar (üniversite adayları için)
Bilgisayar mühendisi ne iş yapar (üniversite adayları için)Bilgisayar mühendisi ne iş yapar (üniversite adayları için)
Bilgisayar mühendisi ne iş yapar (üniversite adayları için)
 
C sharp-videolari
C sharp-videolariC sharp-videolari
C sharp-videolari
 
C sharp-odevi
C sharp-odeviC sharp-odevi
C sharp-odevi
 
başlıkk 11111
başlıkk 11111başlıkk 11111
başlıkk 11111
 
C sharp-konferansi
C sharp-konferansiC sharp-konferansi
C sharp-konferansi
 
C sharp-proje
C sharp-projeC sharp-proje
C sharp-proje
 

C#4.0

  • 1. 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
  • 2. 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
  • 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 platform Operasyonlarda «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ı kullanma HTML DOM gibi dinamik nesne modelleri ile rahat etme COM Arayüzleri (IDispatch) ile hızlı uyum..!
  • 6. 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
  • 7. 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.
  • 8. 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..
  • 9. Dynamic: Beyin Cimnastiği Amaç: Dinamik bir koleksiyondan bir eleman almak Static eşleniği: string[] a = GetStringArray(…); string result = a[a.Length– 1];
  • 10. SentaksDenemesi #1 Dinamik operasyonu açıkca belli etme: object d = GetDynamicObject(…); string result = d~[d~.Length- 1];
  • 11. Sentaks Denemesi #1 Dinamik operasyonu açıkca belli etme: object d = GetDynamicObject(…); string result = ~(string)d~[d~.Length~- 1]; Problem:Bırrrr! 
  • 12. Sentaks Denemesi #2 Dynamic context: object d = GetDynamicObject(…); string result = dynamic(d[d.Length - 1]);
  • 13. Sentaks Denemesi #2 Dynamic context: object d = GetDynamicObject(…); int index = GetIndex(…); string result = dynamic(d[index * 2]);
  • 14. 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 
  • 15. 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! 
  • 16. Sentaks Denemesi #3 İfade içine dinamiklik izi bırakmak object d = GetDynamicObject(…); int index = GetIndex(…); string result =dynamic(d)[index * 2];
  • 17. Sentaks Denemesi #3 İfade içine dinamiklik izi bırakmak object d = GetDynamicObject(…); string result = d[dynamic(d).Length- 1];
  • 18. 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... 
  • 19. Sentaks Denemesi #4 Dynamic Tip: dynamic d = GetDynamicObject(…); varlen = d.Length; string result =d[len- 1]; Var, object, dynamic karmaşası ???????
  • 20. Sentaks Denemesi #4 Dynamic Tip: dynamic d = GetDynamicObject(…); int index = GetIndex(…); string result =d[index * 2];
  • 21. 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. 
  • 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 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:"); var result = (CDrive.TestSub.File1.txt >> CDrive.TestSub.File2.txt);Kaynak : www.codeproject.com
  • 23. ‘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
  • 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. 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)
  • 26. 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.
  • 27. 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.
  • 28. Dinamik Nesneler İle Çalışmak demo
  • 29. 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;
  • 30. 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
  • 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.