Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Visual Studio Codename Orcas, LINQ Janusz Nowak. 2 Plan prezentacji Nowe rodzaje projektów i zmiany w VS Nowe rodzaje projektów i zmiany w VS C# 3.0 C#

Podobne prezentacje


Prezentacja na temat: "Visual Studio Codename Orcas, LINQ Janusz Nowak. 2 Plan prezentacji Nowe rodzaje projektów i zmiany w VS Nowe rodzaje projektów i zmiany w VS C# 3.0 C#"— Zapis prezentacji:

1 Visual Studio Codename Orcas, LINQ Janusz Nowak

2 2 Plan prezentacji Nowe rodzaje projektów i zmiany w VS Nowe rodzaje projektów i zmiany w VS C# 3.0 C# 3.0 LINQ ( ang. Language INtegrated Query pol. Zintegrowany język zapytań) LINQ ( ang. Language INtegrated Query pol. Zintegrowany język zapytań) Co my mamy z tego? Co my mamy z tego? Źródła Źródła

3 3 Nowe rodzaje projektów i zmiany w VS Test Project Test Project Outlook Add-in Outlook Add-in Możliwość pisania rozszerzeń do pakietu Office Możliwość pisania rozszerzeń do pakietu Office Analizator kodu Analizator kodu Śledzenie zmiennych Śledzenie zmiennych Stos wywołań Stos wywołań

4 4 C# 3.0 Wnioskowanie typu zmiennych lokalnych Wnioskowanie typu zmiennych lokalnych Metody rozszerzające Metody rozszerzające Lambda wyrażenia Lambda wyrażenia Inicjatory obiektów i kolekcji Inicjatory obiektów i kolekcji Typy anonimowe Typy anonimowe Tablice z wnioskowanym typem Tablice z wnioskowanym typem Wyrażenia z zapytaniami Wyrażenia z zapytaniami Drzewa wyrażeń Drzewa wyrażeń

5 5 C# Wnioskowanie typu zmiennych lokalnych var i = 5; var s = "Hello"; var d = 1.0; var numbers = new int[] {1, 2, 3}; var orders = new Dictionary (); var i = 5; var s = "Hello"; var d = 1.0; var numbers = new int[] {1, 2, 3}; var orders = new Dictionary (); Oznacza to samo co int i = 5; string s = "Hello"; double d = 1.0; int[] numbers = new int[] {1, 2, 3}; Dictionary orders = new Dictionary (); Oznacza to samo co int i = 5; string s = "Hello"; double d = 1.0; int[] numbers = new int[] {1, 2, 3}; Dictionary orders = new Dictionary ();

6 6 C# Wnioskowanie typu zmiennych lokalnych Deklaracja musi zawierać inicjator Deklaracja musi zawierać inicjator W czasie kompilacji typ wyrażenia inicjalizującego !=null W czasie kompilacji typ wyrażenia inicjalizującego !=null Inicjator nie może być obiektem ani kolekcją, ale może być wyrażeniem, które zawiera inicjalizacje obiektu lub kolekcji Inicjator nie może być obiektem ani kolekcją, ale może być wyrażeniem, które zawiera inicjalizacje obiektu lub kolekcji Jeśli deklaracja składa się z wielu deklaracji to inicjatory muszą mieć ten sam typ w czasie kompilacji. Jeśli deklaracja składa się z wielu deklaracji to inicjatory muszą mieć ten sam typ w czasie kompilacji. Błędne przykłady: var x;//brak inicjacji var y = {1, 2, 3}; //inicjalizacja przez kolekcje var z = null;//typ null nie dozwolony Błędne przykłady: var x;//brak inicjacji var y = {1, 2, 3}; //inicjalizacja przez kolekcje var z = null;//typ null nie dozwolony

7 7 C# Metody rozszerzające Pozwalają na rozszerzenie istniejących typów o nowe metody Pozwalają na rozszerzenie istniejących typów o nowe metody Metody rozszerzające są deklarowane przez słowo this w pierwszym parametrze metody (this string s) Metody rozszerzające są deklarowane przez słowo this w pierwszym parametrze metody (this string s) Metody rozszerzające możemy deklarować tylko w statycznych klasach Metody rozszerzające możemy deklarować tylko w statycznych klasach Importujemy metody rozszerzające przezusing nazwa_namespace; ( using Acme.Utilities;) Importujemy metody rozszerzające przezusing nazwa_namespace; ( using Acme.Utilities;) Możemy wołać nowe metod używając składni instancyjnych metod Możemy wołać nowe metod używając składni instancyjnych metod

8 8 C# Metody rozszerzające namespace Acme.Utilities namespace Acme.Utilities { public static class Extensions { public static int ToInt32(this string s) {return Int32.Parse(s); } }} Użycie metod rozszerzających Użycie metod rozszerzających using Acme.Utilities; string s = "1234"; int i= s.ToInt32();// To samo co Extensions.ToInt32(s)

9 9 C# Lambda wyrażenia Lambda wyrażenia jest to nowy sposób pisania anonimowych metod z wnioskowaniem typów oraz możliwością przekształcenia do typów delegowanych i drzewa wyrażeń. Lambda wyrażenia jest to nowy sposób pisania anonimowych metod z wnioskowaniem typów oraz możliwością przekształcenia do typów delegowanych i drzewa wyrażeń. Przykład: listOfFoo.Where(delegate(Foo x) { return x.size>10;}) Przykład: listOfFoo.Where(delegate(Foo x) { return x.size>10;}) możemy zapisać możemy zapisać listOfFoo.Where(x => x.size>10); listOfFoo.Where(x => x.size>10);

10 10 C# Lambda wyrażenia Przykłady: Przykłady: x => x + 1 // domniemany typ, treść będąca wyrażeniem x => x + 1 // domniemany typ, treść będąca wyrażeniem x => { return x + 1; } // typ wywnioskowany, deklaracja x => { return x + 1; } // typ wywnioskowany, deklaracja (int x) => x + 1 // jawny typ, treść będąca wyrażeniem (int x) => { return x + 1; } // jawny typ, deklaracja (x, y) => x * y // kilka parametrów () => Console.WriteLine() // bez parametrów

11 11 C# Lambda wyrażenia Co dają nam lambda wyrażenia: Anonimowe metody wymagają podania typu, lambda wyrażenia nie. Anonimowe metody wymagają podania typu, lambda wyrażenia nie. Wyrażenie lambda może być deklaracją lub wyrażeniem zaś metoda anonimowa tylko deklaracją Wyrażenie lambda może być deklaracją lub wyrażeniem zaś metoda anonimowa tylko deklaracją Wyrażenie lambda może zostać uznane za drzewo wyrażenia. Wyrażenie lambda może zostać uznane za drzewo wyrażenia.

12 12 C# Inicjatory obiektów i kolekcji Pozwalają nam na łatwe konstruowanie i inicjalizowanie obiektów. Pozwalają nam na łatwe konstruowanie i inicjalizowanie obiektów. Oszczędność kodu. Oszczędność kodu.

13 13 C# Inicjatory obiektów public class Punkt { int x, y; public class Punkt { int x, y; public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } } public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } } Możemy stworzyć obiekt tej klasy w ten sposób: Możemy stworzyć obiekt tej klasy w ten sposób: var a = new Punkt { X = 0, Y = 1 }; var a = new Punkt { X = 0, Y = 1 }; co ma taki sam efekt co: co ma taki sam efekt co: var a = new Punkt(); a.X = 0; a.Y = 1; var a = new Punkt(); a.X = 0; a.Y = 1;

14 14 C# Inicjatory public class Prostokąt// składająca się z 2punktów public class Prostokąt// składająca się z 2punktów { Punkt p1, p2; { Punkt p1, p2; public Punkt P1 { get { return p1; } set { p1 = value; } } public Punkt P2 { get { return p2; } set { p2 = value; } } } Obiekt tej klasy możemy stworzyć przez: Obiekt tej klasy możemy stworzyć przez: var r = new Prostokąt { P1 = new Punkt { X = 0, Y = 1 }, P2 = new Punkt { X = 2, Y = 3 }}; var r = new Prostokąt { P1 = new Punkt { X = 0, Y = 1 }, P2 = new Punkt { X = 2, Y = 3 }}; co ma ten sam efekt co co ma ten sam efekt co var r = new Prostokąt(); var __p1 = new Punkt(); __p1.X = 0; __p1.Y = 1; r.P1 = __p1; var __p2 = new Punkt(); __p2.X = 2; __p2.Y = 3; r.P2 = __p2; r.P1 = __p1; var __p2 = new Punkt(); __p2.X = 2; __p2.Y = 3; r.P2 = __p2; Zmienne __p1 i __p2 są tymczasowe, niedostępne i niewidoczne

15 15 C# Inicjatory obiektów Natomiast gdy konstruktor Prostokąta tworzy dwa obiekty Punkt Natomiast gdy konstruktor Prostokąta tworzy dwa obiekty Punkt public class Prostokąt {Punkt p1 = new Punkt(); Punkt p2 = new Punkt(); public Punkt P1 { get { return p1; } } public Punkt P2 { get { return p2; } }} public class Prostokąt {Punkt p1 = new Punkt(); Punkt p2 = new Punkt(); public Punkt P1 { get { return p1; } } public Punkt P2 { get { return p2; } }} Obiekt tej klasy możemy stworzyć przez Obiekt tej klasy możemy stworzyć przez var r = new Prostokąt { P1 = { X = 0, Y = 1 }, P2 = { X = 2, Y = 3 } }; var r = new Prostokąt { P1 = { X = 0, Y = 1 }, P2 = { X = 2, Y = 3 } }; lub lub var r = new Prostokąt(); r.P1.X = 0; r.P1.Y = 1; r.P2.X = 2; r.P2.Y = 3; var r = new Prostokąt(); r.P1.X = 0; r.P1.Y = 1; r.P2.X = 2; r.P2.Y = 3;

16 16 C# Inicjatory kolekcji public class Kontakt public class Kontakt { string name; List pNumbers = new List (); List pNumbers = new List (); public string Name { get { return name; } set { name = value; } } public string Name { get { return name; } set { name = value; } } public List PNumbers { get { return pNumbers; } } public List PNumbers { get { return pNumbers; } }} List możemy stworzyć i zainicjować w poniższy sposób: List możemy stworzyć i zainicjować w poniższy sposób: var contacts = new List { new Contact {Name = "Chris Smith", PNumbers = { " ", " " }}, new Contact {Name = "Bob Harris", PNumbers = { " " }} };

17 17 C# Inicjatory kolekcji Ma to ten sam efekt co var contacts = new List (); var __c1 = new Contact(); __c1.Name = "Chris Smith"; __c1.PNumbers.Add(" "); __c1.PNumbers.Add(" "); contacts.Add(__c1); var __c2 = new Contact(); __c2.Name = "Bob Harris"; __c2.PNumbers.Add(" "); contacts.Add(__c2); Ma to ten sam efekt co var contacts = new List (); var __c1 = new Contact(); __c1.Name = "Chris Smith"; __c1.PNumbers.Add(" "); __c1.PNumbers.Add(" "); contacts.Add(__c1); var __c2 = new Contact(); __c2.Name = "Bob Harris"; __c2.PNumbers.Add(" "); contacts.Add(__c2);

18 18 C# Typy anonimowe Inicjalizator != null. Inicjalizator != null. Nazwa anonimowego typu jest automatycznie generowana przez kompilator w czasie kompilacji i nie możemy się do niej odwoływać w programie. Nazwa anonimowego typu jest automatycznie generowana przez kompilator w czasie kompilacji i nie możemy się do niej odwoływać w programie. Jeśli w programie podamy dwa inicjatory anonimowego obiektu, które mają takie same nazwy parametrów tego samego typu w tej samej kolejności, to będą to instancje tego samego typu. Jeśli w programie podamy dwa inicjatory anonimowego obiektu, które mają takie same nazwy parametrów tego samego typu w tej samej kolejności, to będą to instancje tego samego typu. Przykład: Przykład: var p1 = new { Name = "Lawnmower", Price = }; var p2 = new { Name = "Shovel", Price = }; p1 = p2; //OK ponieważ ten sam anonimowy typ var p1 = new { Name = "Lawnmower", Price = }; var p2 = new { Name = "Shovel", Price = }; p1 = p2; //OK ponieważ ten sam anonimowy typ

19 19 C# Tablice z wnioskowanym typem Domniemany typ tablic, sposób tworzenia i inicjalizacji tablic, których typ jest wnioskowany po elementach inicjalizujących. Domniemany typ tablic, sposób tworzenia i inicjalizacji tablic, których typ jest wnioskowany po elementach inicjalizujących. Inicjator musi zawierać jeden typ, dla którego wszystkie elementy z zbioru dadzą się przekonwertować i nie jest to null. Inicjator musi zawierać jeden typ, dla którego wszystkie elementy z zbioru dadzą się przekonwertować i nie jest to null. Przykłady Przykłady var a = new[] { 1, 10, 100, 1000 };// int[] var b = new[] { 1, 1.5, 2, 2.5 };// double[] var c = new[] { "hello", null, "world };// string[] var a = new[] { 1, 10, 100, 1000 };// int[] var b = new[] { 1, 1.5, 2, 2.5 };// double[] var c = new[] { "hello", null, "world };// string[] var d = new[] { 1, "one", 2, "two" };// Error var d = new[] { 1, "one", 2, "two" };// Error

20 20 C# Tablice z wnioskowanym typem Wnioskowanie typu tablic możemy połączyć z anonimowo inicjacja obiektów, żeby stworzyć anonimowo strukturę danych. np..: Wnioskowanie typu tablic możemy połączyć z anonimowo inicjacja obiektów, żeby stworzyć anonimowo strukturę danych. np..: var contacts = new[] { new { Name = "Chris Smith", PhoneNumbers = new[] { " ", " " }}, new {Name = "Bob Harris", PhoneNumbers = new[] { " " } } }; var contacts = new[] { new { Name = "Chris Smith", PhoneNumbers = new[] { " ", " " }}, new {Name = "Bob Harris", PhoneNumbers = new[] { " " } } };

21 21 C# Wyrażenia z zapytaniami Możliwość użycia zapytań w stylu SQL lub XQuery dla kolekcji, tablic w C#. Możliwość użycia zapytań w stylu SQL lub XQuery dla kolekcji, tablic w C#. Przykłady zapytań: Przykłady zapytań:

22 22 C# Wyrażenia z zapytaniami Where from c in customers where c.City == "London" select c Where from c in customers where c.City == "London" select c Będzie przetłumaczone na customers. Where(c => c.City == "London") customers. Where(c => c.City == "London") Select from c in customers where c.City == "London" select c.Name Select from c in customers where c.City == "London" select c.Name Group Group from c in customers group c.Name by c.Country from c in customers group c.Name by c.Country

23 23 C# Wyrażenia z zapytaniami Orderby from c in customers orderby c.Name select new { c.Name, c.Phone }//anonimowy typ Orderby from c in customers orderby c.Name select new { c.Name, c.Phone }//anonimowy typ Złożone zapytania Złożone zapytania from c in customers where c.City == "London" from o in c.Orders where o.OrderDate.Year == 2005 select new { c.Name, o.OrderID, o.Total }

24 24 C# Drzewa wyrażeń Drzewa wyrażeń pozwalają na to, żeby wyrażenia lambda były reprezentowane jako dane zamiast kodu (delegat). Drzewa wyrażeń pozwalają na to, żeby wyrażenia lambda były reprezentowane jako dane zamiast kodu (delegat). Func f = x => x + 1;// Code Func f = x => x + 1;// Code Expression > e = x => x + 1;// Data Expression > e = x => x + 1;// Data delegat f odwołuje się do metody, która wylicza x + 1, a drzewo wyrażenia opisuje wyrażenie delegat f odwołuje się do metody, która wylicza x + 1, a drzewo wyrażenia opisuje wyrażenie x + 1.

25 25 LINQ LINQ dla C#, VB oraz innych języków w przyszłości F# … LINQ dla C#, VB oraz innych języków w przyszłości F# … Odmiany: Odmiany: Linq - Obiekty film Linq - Obiekty filmfilm DLinq - Bazy danych film DLinq - Bazy danych filmfilm XLinq – Xml film XLinq – Xml filmfilm

26 26 Co my mamy z tego? Łatwiejsze połączenie dwóch światów baz danych i obiektów. Łatwiejsze połączenie dwóch światów baz danych i obiektów. Moc XPath i XQuery dla XML w C# 3.0. Moc XPath i XQuery dla XML w C# 3.0. Nowe możliwości operowania na obiektach. Nowe możliwości operowania na obiektach. Testowanie. Testowanie.

27 27 Źródła id= id= id= id=114680

28 28 KONIEC


Pobierz ppt "Visual Studio Codename Orcas, LINQ Janusz Nowak. 2 Plan prezentacji Nowe rodzaje projektów i zmiany w VS Nowe rodzaje projektów i zmiany w VS C# 3.0 C#"

Podobne prezentacje


Reklamy Google