1 / 41

Visual Studio 2005: C# 2.0

Visual Studio 2005: C# 2.0. Dalibor Kačmář Academic Developer Evangelist Microsoft s.r.o. Agenda. Úvod Generika Neúplné typy Anonymní metody Iterátory Další C# rozšíření Novinky v prostředí Visual Studio 2005 Refaktoring kódu Závěr. Visual C# 2005.

darren
Télécharger la présentation

Visual Studio 2005: C# 2.0

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual Studio 2005: C# 2.0 Dalibor Kačmář Academic Developer Evangelist Microsoft s.r.o.

  2. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  3. Visual C# 2005 • Visual C# 2005 přináší několik zásadních rozšíření jazyka včetně celé řady novinek ve vývojovém prostředí • Rozšíření jazyka • Podpora elegantního a rychlého typově bezpečného kódu • Zjednodušení některých úkolů programátora • Navržen s maximálním důrazem na kompatibilitu • Vylepšená produktivita • Refactoring, kódu a jeho formátování • Zdokonalené laděné • Datatipy, visualizéry …

  4. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  5. Píšeme univerzální kód • Knihovny velmi často využívají typobject • Umožňuje pracovat s daty libovolného typu • Použit pro položky, parametry a návratové hodnoty • Uvedená technika ale vytváří mnoho problémů • Chybějící typová kontrola při překladu • Lze použít nevhodné nebo nekompatibilní typy • Zbytečná provize při použití hodnotových typů • Boxing, unboxing a typová kontrola za běhu aplikace • Potenciální provize při použití referenčních typů • Typová kontrola za běhu aplikace při konverzi výsledků • Obtěžující a nevzhledné typové konverze

  6. Příklady using System.Collections; // referenční typ – třída Pracovnik Stack seznam = new Stack(); // Parametr je typu object // Proběhne implicitní konverze seznam.Push( new Pracovnik() ); // Návratová hodnota je typu object // Potřebujeme explicitní konverzi Pracovnik zam = (Pracovnik) seznam.Pop(); // Hodnotový typ - integer Stack velikosti = new Stack(); // Proběhne Boxing sizes.Push( 42 ); // Proběhne Unboxing int size1 = (int) sizes.Pop(); // Nevhodné a překladač neodhalí sizes.Push( 77 ); sizes.Push( new Pracovnik() ); // Překlad v pořádku, ale nastane // výjimka InvalidCastException int size2 = (int) sizes.Pop();

  7. Generika • Kód může být parametrizován typovými informacemi • Umožňuje vytváření šablon kódu • Konkrétní typ zadán až při použití • Podobné generikům známým z jazyků Eiffel a Ada a C++ šablonám • Můžeme vytvářet různé typy generik • Třídy, struktury, rozhraní, metody a delegáty • Významné přínosy při použití generik • Umožňuje silnou typovou kontrolu v době překladu • Méně kontroly za běhu aplikace a operací boxing a unboxing • Omezení nutnosti explicitních typových konverzí • Výsledkem je čistější, rychlejší a bezpečnější kód

  8. Omezení • Specifikace požadavků na typové parametry • Zabezpečuje, že typy poskytují požadovanou funkcionalitu • Umožňuje silnější typovou kontrolu při překladu • Omezuje potřebu explicitních typových konverzí • Může omezit použitelnost výsledného generika • Existují tři typy omezení • Omezení třídy (Class constraint) • Zajišťuje odvození od specifické základní třídy • Omezení rozhraní (Interface constraint) • Zajišťuje typům implementaci specifického rozhraní • Omezení konstruktoru (Constructor constraint) • Zajišťuje existenci veřejného implicitního konstruktoru

  9. Založení a použití generické třídy • Omezení generika • Výkonnost kódu

  10. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  11. Neúplné typy • Umožňují rozdělit implementaci do několika souborů • Platí pro třídy, struktury a rozhraní • Deklarovány typovým modifikátorem partial • Nabízí několik výhod • Větší implementace mohou být rozděleny • Uživatelský kód může být oddělen od generovaného kódu • Zabraňuje nástrojům přepsat uživatelské změny • Využito u WinForms a silně typových DataSetů • Více vývojářů může souběžně pracovat na stejném typu • Umožňuje code-beside na rozdíl od code-behind • Využito u ASP.NET 2.0 • Může ulehčit údržbu a řízení změn ve zdrojovém kódu

  12. Využití neúplných typů • Rozdělení typu neovlivňuje výsledný kód • Všechny části musí být při překladu spojeny • Nelze rozšířit již jednou přeložený typ • Kód je kumulativní nebo nekumulativní • Kumulativní elementy jsou spojovány • Metody, položky a rozhraní • Nekumulativní elementy musí být stejné ve všech částech • Typ, viditelnost a základní třídu • Class View a navigační lišta zobrazuje vždy celý typ

  13. Založení a použité neúplného typu

  14. Agenda • Úvod • Generika • Neúplné typy • Vlastnosti a indexery • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  15. Anonymní metody • Některý kód je volán pouze přes delegáty • Např. event handlerya callback funkce • Použití tradičních metod se zdá být zbytečné • Anonymní metody poskytují elegantní řešení • Umožňuje psát kód delegátů jako ‘in-line’ • Lze použít všude kde je očekáván delegát • Včetně argumentů metod • Vytváří se klíčovým slovem delegate • Podobný lambda funkcím v jazycích Python a Lisp • Opřen o implicitní konverzi na typ delegate • Vyžaduje kompatibilní seznam parametrů a návratovou hodnotu

  16. Parametry a stav • Seznam parametrů lze vynechat, pokud není požadován • Považován kompatibilní se všemi delegáty kromě těch, kteří mají out parametry • Odlišný od prázdného seznamu parametrů deklarovaného jako ‘()’ • Musí se stejně dodat, ve chvíli kdy je delegát volán • Lze přistupovat k lokálnímu stavu zaobalující metody • Zahrnuje lokání proměnné a parametry • Nazýváme je vnější (outer) proměnné anonymních metod • Vnější proměnné, na které se odkazujeme, se nazývají zachycené (captured) • Životnost zachycených vnějších proměnných je prodloužena • Alespoň po dobu životnosti anonymní metody

  17. Použití anonymních metod s delegátem a vnější proměnné

  18. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  19. Průchod kolekcí • Obecný požadavek na práci s kolekcí • C# obsahujevýraz foreach pro zjednodušení procesu • Prochází po jednotlivých položkách vhodné kolekce • Kolekce typicky implementují IEnumerable • Enumerovatelné typy typicky implementují IEnumerator • Můžeme používat silně typový kód místo rozhraní • Enumerační kód je někdy obtížné napsat public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); } // System.Collections public interface IEnumerable { IEnumerator GetEnumerator(); }

  20. Iterátor • Blok příkazů, které vytvoří seřazenou sekvenci • Vyznačuje se jedním nebo více výrazyyield • yield returnvytváří další hodnotu iterace • yield breakindikuje ukončení iterace • Může jít o tělo metody, pokud vrací odpovídající rozhraní • IEnumerator[< T >] nebo IEnumerable[< T >] • Kompilátor generuje většinu kódu • Implementaci enumerátoru • Vnořené třídy pro uchování stavu iterace • Každý iterátor má svůj vlastní stav • Odstraňuje problémy způsobné kolizemi iterátorů

  21. Vytvoření a použití iterátoru kolekce

  22. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  23. Modifikátory viditelnosti • Ve verzi 2.0 lze odlišit mezi viditelností přístupových metod u vlastností a indexerů • Běžné je požadovat public get avšak protected set • Lze modifikovat jednu nebo obě přístupové metody • Zbývající metoda přebere viditelnost z deklarace vlastnosti nebo indexeru • Viditelnost lze pouze více omezit public int this[ int i ] { get { return this.a[ i ]; } protected set { this.a[ i ] = value; } }

  24. Dedukce delegátů • Překladač nyní umí odhadnout instanci delegáta • Používá stejný mechanismus jako u anonymních metod • Umožňuje přímé přiřazení metody instanci delegáta • Implicitně převedena na kompatibilní typ delegáta • Ve většině případů lze vypustit explicitní založení • Poskytuje elegantní syntaxi založení delegátů // C# 1.0 this.Load += new EventHandler( this.FormLoad ); this.Update( new CallBack( this.MyMethod ) ); // C# 2.0 this.Load += this.FormLoad; this.Update( this.MyMethod );

  25. Statické třídy • Formalizuje existující návrhový vzor • Sealed class s privátním konstruktorem a statickými členy • Vhodné pro pomocné třídy a „globální“ metody • Překladač vynutí dodržení pravidel • Zajistí, že neexistují členské metody a data • Brání založení instance a dědičnosti • Statické třídy musí být odvozeny ze třídy object static class Utility { public static void ActivateLicence() {} } // Chyba! static class Tool : Utility {} // Chyba! Utility u = new Utility();

  26. Alias kvalifikátor // C# 2.0 using System; namespace Imaging { public class Console {} public class System { public void Demo() { // Chyba! Console.Write("6x9"); // OK global::System.Console .Write("42"); } } } • Nový kvalifikátor pro globální jmenný prostor • Nový operátor ‘::’ • Aplikován na aliasy a jmenné prostory • Alias globalse odkazuje na kořen jmenného prostoru • Řeší různé problémy s rozlišením jména • Vhodné pokud jedna entita překrývá jinou • Podobné C++ scope resolution operátoru

  27. #pragma • Nová direktiva#pragma • Používá se pro vydávání speciální instrukcí překladači • Aktuálně podporovány pouze „warning pragma“ • Umožňuje zakázat nebo povolit varování překladače • Využívá čárkami oddělený seznam varování • Neuvádějte "CS" před číslem varování // Zakáže warning CS0169 #pragma warning disable 0169 // Negeneruje warning int i; // Zapne warning CS0169 #pragma warning restore 0169 // Generuje Warning CS0169 int j = 1;

  28. Typy s hodnou Null • Nelze přiřadit null hodnotovým typům • Problém pokud chápeme null jako „bez hodnoty“ místo „bez odkazu“ • Databázové sloupce s hodnotovými typy mohou mít hodnotu null • Řešení – nullable typy • Nullable<T> mohou uchovat hodnotu null • Nová syntaxe s operátorem ?

  29. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  30. Vlastnosti prostředí • Omezení verze jazyka (Build|Advanced) • Implicitně 2.0, ale lze omezit na ISO-1 (1.0) • Formátování kódu (Tools|Options|Text Editor|C#|Formatting) • Individuální nastavení pro jednotlivé elementy jazyka doprovozené názorným příkladem • Export a import nastavení (Tools|Import/Export Settings…) • Možnost přenášení a sdílení nastavení ve skupině programátorů a mezi počítači

  31. Novinky editoru • Navigace • Zaznamenávají se všechny pohyby v/po souborech a mezi projekty • Možnost pohybu jako v IE (vpřed/vzad) • Práce se záložkami (otevřenými soubory) • Close All But This, Copy Full Path, … • Vyřešení nejasných typů • Přidá výraz using nebo FQN • Za předpokladu existující reference v projektu

  32. Novinky editoru …pokračování • Code Definition okno • Zobrazuje definici toho co editujeme, read-only • Sledování změn • Žluté – přidáno/nepřeloženo, Zelené – přidáno/přeloženo • Code Snippet • Typické kusy kódu, které často píšeme • Konstrukce typu if-else, foreach, class, … • Lze vytvořit vlastní • Surround with – označený blok kódu lze umístit do těla snippetu

  33. Novinky editoru - ladění • Instant watch • Vizualizéry • Přirozeně zobrazují složité proměnné • Dataset, Data Table, Text, XML, HTML, vlastní … • VS Host • Aplikační assembly jsou při ladění zavedeny do <app>.vshost.exe • Partial trust debuging, rychlejší start • Edit-and-Continue • Podobné VC++ 6.0 • Nelze provést jakoukoli změnu ovlivňující metadata • Přidat/ubrat metody, parametry, veřejné položky

  34. Nové vlastnosti prostředí editoru • Nové vlastnosti ladění

  35. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  36. Co je to refaktoring? • Změna struktury kódu bez vlivu na to co dělá • Extrakce metody • Zaobalení položky • Extrakce rozhraní • Přejmenování • Změna deklarace (podpisu) • Extrakce parametru • Expanze • Napříč všemi projekty v řešení

  37. Refaktoring

  38. Agenda • Úvod • Generika • Neúplné typy • Anonymní metody • Iterátory • Další C# rozšíření • Novinky v prostředí Visual Studio 2005 • Refaktoring kódu • Závěr

  39. Závěrem • Rozšíření jazyka C# • Významně posilují produktivitu a bezpečnost vytvoření kódu • Navazují a podporují aktuální programovací praktiky • Novinky ve vývojovém prostředí Visual Studio 2005 • Zjednodušují a urychlují práci při psaní kódu • Významně zpříjemňují proces ladění

  40. Informační zdroje • C# Developer Center na MSDN http://msdn.microsoft.com/vcsharp • C# Team Member Blogs http://msdn.microsoft.com/vcsharp/team/blogs/

More Related