Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.

Slides:



Advertisements
Podobné prezentace
Tomáš Petříček Microsoft C# MVP
Advertisements

Funkce Připomeňme si program pro výpočet faktoriálu:
AJAX fenomén současného internetu Dalibor Kačmář Academic Developer Evangelist Microsoft ČR host Vítek Karas Senior Software Development Engineer Microsoft.
Kompozitní aplikace (Office Business Applications) Michael Juřek, Software Architect Tomáš Kutěj, TSP – Office Platform Microsoft s.r.o.
ISV Community Days. Čtvrtletně Technologická část zaměřená na jednu technologii.NET Connected Apps, Windows Server 2003 Enhanced, SQL VS 2005,
Pole, ukazatele a odkazy
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Michal Neuwirth Partner Technical Readiness Microsoft s.r.o.
C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš.
Radek Špinka Přepínače MSSQL výběr.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Úloha informačních technologií ve státní správě Robert Hernady Senior Systems Engineer Microsoft.
C# - Exceptions (výjimky)
Software Architect Forum 2006 Trendy ve vývoji aplikací Michael Juřek, Dalibor Kačmář Microsoft s.r.o.
Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě.
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
Jiří Karpeta Platform Strategy Advisor Microsoft Czech Republic
Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014.
Unifikovaná architektura databáze Katsiaryna Chernik.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Microsoft Office InfoPath 2003 Tomáš Kutěj Account Technology Specialist
Návrh a tvorba WWW Cvičení 5
Jak využít Office 365? Několik scénářů. | Copyright© 2010 Microsoft Corporation.
Heterogenní serverové prostředí, správa, bezpečnost a interoperabilita Jak zajistit interoperabilitu v hererogenním serverovém prostředí? Jak spolupracuje.
Jiří Burian DPE PM Nový typ aplikací a požadvků Visual Studio 2008 Silverlight Expression Web 2.0 Připravujeme lokalizaci komunitních.
12/04/20151 Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections.
ADO – práce s databázemi
Partnerská strategie Martin FANTA Manažer Partnerské Skupiny Microsoft Česká Republika.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
ADO.NET – Objekt DataSet (offline scenář) Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
RDF a RQL Roman Krejčík. RDF a RQL RDF – Resource Description Framework –Jazyk pro ukládání informací v XML –RDF Schema RQL – RDF Query Language –Dotazování.
Partnerská konference Solution Partners Clarion Congress Hotel Prague 1. října 2009.
Internet Explorer 8 Štěpán Bechynský Developer Evangelist Microsoft s.r.o.
Information Worker v období 2006/2007 People – ready business Drahoslav Dvořák Solution Specialist Microsoft.
Windows 7 & Internet Explorer 8 vývoj aplikací a kompatibilita Štěpán Bechynský, Ondřej Štrba Developer Evangelists
Jak postupujeme vpřed v testování? Jak se nám daří vytvářet denní buildy? Stíháme opravovat chyby? Jak kvalitně chyby opravujeme?
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Pokročilé programování v C++ (část B)
Aktuální bezpečnostní výzvy … a jak na ně ….. v praxi Dalibor Lukeš Platform and Security Manager Microsoft Czech and Slovak Michal Pechan Production Stream.
Pokročilá ochrana informací Ladislav Šolc, Tomáš Kutěj Systems Engineers Microsoft, s.r.o.
23/04/20151 LINQ (1) LINQ (Language Integrated Query) je součást MS.NET Frameworku umožňující jednotný přístup k datům a jejich zpracování deklarativ-
Potřebujete vybudovat business aplikaci? Pokryje dílčí obchodní potřeby určité skupiny zaměstnanců, jednoho nebo více týmů Bude vytvořena / připravena.
Chytrá volba pro podnikání René Keyzlar Operator Channel Lead 1/3/2012.
FUN WITH C# EPISODE XIII INTERFACES STRIKE BACK CLI Type System All types Reference types (allocated on managed heap) PointersValue types (allocated.
YOUR LOGO C# ADO.NET. YOUR LOGO Úvod – ADO.NET  ADO.NET zajišťuje přístup k databázím  2 koncepčně jedinečné styly -Připojeně -Odpojeně přechodné (offline)
Petr Puš SW Architekt Unicorn a.s. Microsoft C# MVP.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Advanced .NET Programming I 1st Lecture
Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo-vě bezpečné ukazatele na funkce.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
R nejen v SQL Serveru Jiří Neoral BI Data Architect
Databázové systémy a SQL
private var hodnota:number
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Windows Server 2003 Service Pack 1 z pohledu bezpečnosti
Vázání dat Data Binding
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Advanced .NET Programming I 1st Lecture
Bridge.
Transkript prezentace:

Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg Technical Fellow Microsoft Corporation

Projekt LINQ Standardnídotazovacíoperátory Objekty DLinq (ADO.NET) XLinq(System.Xml) XML.NET Language Integrated Query C#VB Další… SQLWinFS

C# 3.0 – Cíle návrhu Integrované objekty, relační a XML Postaveno za základech položených v C# 1.0 a 2.0 Běží na.NET 2.0 (“Whidbey”) CLR Nesvazuje jazyk se specifickými APIs Zůstává 100% zpětně kompatibilní

4 Language Integrated Query

5 Inovace v jazyce C# 3.0 var contacts = from c in customers from c in customers where c.State == "WA" where c.State == "WA" select new { c.Name, c.Phone }; select new { c.Name, c.Phone }; var contacts = customers customers.Where(c => c.State == "WA").Where(c => c.State == "WA").Select(c => new { c.Name, c.Phone });.Select(c => new { c.Name, c.Phone }); Extension metody Lambda expressions Query výraz Inicializátory objektu Anonymnítypy Dedukce typu lokání proměnné

6 public delegate bool Predicate (T obj); public class List public class List { public List FindAll(Predicate test) { … } public List FindAll(Predicate test) { … } …} Lambda výrazy List customers = GetCustomerList(); List x = customers.FindAll( delegate(Customer c) { return c.State == "WA"; } delegate(Customer c) { return c.State == "WA"; }); List x = customers.FindAll(c => c.State == "WA"); Explicitně typový Statement context Implicitnětypový Expression context

7 Lambda výrazy public delegate T Func (); public delegate T Func (A0 arg0); public delegate T Func (A0 arg0, A1 arg1); … Func test = c => c.State == "WA"; Func f = (x, y) => x * y; Func comparer = (int x, int y) => { (int x, int y) => { if (x > y) return 1; if (x > y) return 1; if (x < y) return -1; if (x < y) return -1; return 0; return 0; }; }; double factor = 2.0; Func f = x => x * factor;

8 Dotazy přes APIs public class List public class List { public List Where(Func predicate) { … } public List Where(Func predicate) { … } public List Select (Func selector) { … } public List Select (Func selector) { … } …} List customers = GetCustomerList(); List contacts = customers.Where(c => c.State == "WA").Select(c => c.Name); customers.Where(c => c.State == "WA").Select(c => c.Name); Dotazovací operátory jsou prosté metody Typová dedukce zjistí Typová dedukce zjistí Ale co ostatní typy? Deklarovat operátory ve všech kolekcích? A co pole? Metody se skládají do formy dotazu

9 Dotazy přes APIs public static class Sequence { public static IEnumerable Where (IEnumerable source, public static IEnumerable Where (IEnumerable source, Func predicate) { … } Func predicate) { … } public static IEnumerable Select (IEnumerable source, public static IEnumerable Select (IEnumerable source, Func selector) { … } Func selector) { … } …} Customer[] customers = GetCustomerArray(); IEnumerable contacts = Sequence.Select( Sequence.Where(customers, c => c.State == "WA"), Sequence.Where(customers, c => c.State == "WA"), c => c.Name); c => c.Name); Dotazovací operátory jsou statické metody Huh? Chci metodu na IEnumerable Chci metodu na IEnumerable

10 namespace System.Query { public static class Sequence public static class Sequence { public static IEnumerable Where (this IEnumerable source, public static IEnumerable Where (this IEnumerable source, Func predicate) { … } Func predicate) { … } public static IEnumerable Select (this IEnumerable source, public static IEnumerable Select (this IEnumerable source, Func selector) { … } Func selector) { … } … }} Extension metody using System.Query; Extension metody IEnumerable contacts = customers.Where(c => c.State == "WA").Select(c => c.Name); customers.Where(c => c.State == "WA").Select(c => c.Name); Přinese extensions do rozsahu obj.Foo(x, y)  XXX.Foo(obj, x, y) IntelliSense!

11 Lambda výrazy a Extension metody

12 Inicializátory objektů public class Point { private int x, y; private int x, y; public int X { get { return x; } set { x = value; } } public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } public int Y { get { return y; } set { y = value; } }} Point a = new Point { X = 0, Y = 1 }; Point a = new Point(); a.X = 0; a.Y = 1; Přiřazení položky nebo vlastnosti

13 Inicializátory objektů public class Rectangle { private Point p1 = new Point(); private Point p1 = new Point(); private Point p2 = new Point(); private Point p2 = new Point(); public Point P1 { get { return p1; } } public Point P1 { get { return p1; } } public Point P2 { get { return p2; } } public Point P2 { get { return p2; } }} Rectangle r = new Rectangle { P1 = { X = 0, Y = 1 }, P1 = { X = 0, Y = 1 }, P2 = { X = 2, Y = 3 } P2 = { X = 2, Y = 3 }}; Rectangle r = new Rectangle(); r.P1.X = 0; r.P1.Y = 1; r.P2.X = 2; r.P2.Y = 3; Vložené objekty Ne “new Point” Read-only vlastnosti

14 Inicializátory kolekcí List powers = new List { 1, 10, 100, 1000, }; Musí implementovat ICollection Musí implementovat ICollection List powers = new List (); powers.Add(1);powers.Add(10);powers.Add(100);powers.Add(1000);powers.Add(10000);

15 Inicializátory kolekcí public class Contact { private string name; private string name; private List phoneNumbers = new List (); private List phoneNumbers = new List (); public string Name { get { return name; } set { name = value; } } public string Name { get { return name; } set { name = value; } } public List PhoneNumbers { get { return phoneNumbers; } } public List PhoneNumbers { get { return phoneNumbers; } }} List contacts = new List { new Contact { new Contact { Name = "Chris Smith", Name = "Chris Smith", PhoneNumbers = { " ", " " } PhoneNumbers = { " ", " " } }, }, new Contact { new Contact { Name = "Bob Harris", Name = "Bob Harris", PhoneNumbers = { " " } PhoneNumbers = { " " } }};

16 Dedukce typu lokální proměnné int i = 5; string s = "Hello"; double d = 1.0; int[] numbers = new int[] {1, 2, 3}; Dictionary orders = new Dictionary (); var i = 5; var s = "Hello"; var d = 1.0; var numbers = new int[] {1, 2, 3}; var orders = new Dictionary (); “var” znamená stejný typ jako inicializátor

17 Anonymní typy public class Customer { public string Name; public string Name; public Address Address; public Address Address; public string Phone; public string Phone; public List Orders; public List Orders; …} public class Contact { public string Name; public string Name; public string Phone; public string Phone;} Customer c = GetCustomer(…); Contact x = new Contact { Name = c.Name, Phone = c.Phone }; Customer c = GetCustomer(…); var x = new { c.Name, c.Phone }; Customer c = GetCustomer(…); var x = new { Name = c.Name, Phone = c.Phone }; class ??? { public string Name; public string Name; public string Phone; public string Phone;} Projection style initializer

18 var contacts = from c in customers from c in customers where c.State == "WA" where c.State == "WA" select new { c.Name, c.Phone }; select new { c.Name, c.Phone }; Anonymní typy var contacts = customers. customers..Where(c => c.State == "WA“).Where(c => c.State == "WA“).Select(c => new { c.Name, c.Phone });.Select(c => new { c.Name, c.Phone }); class ??? { public string Name; public string Name; public string Phone; public string Phone;} IEnumerable<???> foreach (var c in contacts) { Console.WriteLine(c.Name); Console.WriteLine(c.Name); Console.WriteLine(c.Phone); Console.WriteLine(c.Phone);} ???

19 Dotazovací výrazy Dotazovací syntaxe integrována do jazyka from id in source { from id in source | where condition } [ orderby ordering, ordering, … ] select expr | group expr by key [ into id query ] Začíná pomocí from Nula nebo více from nebo where Volitelně orderby Končí pomocí select nebo group by Volitelně into pokračování

20 from c in customers where c.State == "WA" select new { c.Name, c.Phone }; customers.Where(c => c.State == "WA").Select(c => new { c.Name, c.Phone }); Dotazovací výrazy Dotazy se překládají do volání metod Where, Select, SelectMany, OrderBy, GroupBy

21 Výrazové stromy public class Northwind: DataContext { public Table Customers; public Table Customers; public Table Orders; public Table Orders; …} Northwind db = new Northwind(…); var query = from c in db.Customers where c.State == "WA" select c; Northwind db = new Northwind(…); var query = db.Customers.Where(c => c.State == "WA"); Jak se to však spustí? public class Table : IEnumerable public class Table : IEnumerable { public Table Where(Expression > predicate); public Table Where(Expression > predicate); …} Metoda potřebuje výrazový strom System.Expressions. Expression System.Expressions. Expression

22 Výrazové stromy Kód jako Data Func test = c => c.State == "WA"; Expression > test = c => c.State == "WA"; ParameterExpression c = Expression.Parameter(typeof(Customer), "c"); Expression.Parameter(typeof(Customer), "c"); Expression expr = Expression.EQ( Expression.EQ( Expression.Property(c, typeof(Customer).GetProperty("State")), Expression.Property(c, typeof(Customer).GetProperty("State")), Expression.Constant("WA") Expression.Constant("WA") ); ); Expression > test = Expression.Lambda >(expr, c); Expression.Lambda >(expr, c);

23 LINQ Tech Preview

24 Inovace v jazyce C# 3.0 Lambda Výrazy Extension metody Dedukce typu lokání proměnné Inicializárory objektů Anonymní typy Dotazovací výrazy Výrazové stromy var x = 5; static void Dump(this object o); c => c.Name new Point { x = 1, y = 2 } new { c.Name, c.Phone } from … where … select Expression<T>

25 Více informací

© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.