visual studio 2005: c# 2.0

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

Upload: darren

Post on 04-Jan-2016

69 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Visual Studio 2005:  C#  2.0

Visual Studio 2005: Visual Studio 2005: C# C# 2.02.0

Dalibor KačmářDalibor Kačmář

Academic Developer EvangelistAcademic Developer Evangelist

Microsoft s.r.o.Microsoft s.r.o.

Page 2: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvod

GenerikaGenerika

Neúplné typyNeúplné typy

Anonymní metodyAnonymní metody

IterátoryIterátory

Další C# rozšířeníDalší C# rozšíření

Novinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005

Refaktoring kóduRefaktoring kódu

ZávěrZávěr

Page 3: Visual Studio 2005:  C#  2.0

Visual C# 2005Visual C# 2005

Visual C# 2005 přináší několik zásadních Visual C# 2005 přináší několik zásadních rozšíření jazyka včetně celé řady novinek rozšíření jazyka včetně celé řady novinek ve vývojovém prostředíve vývojovém prostředí

Rozšíření jazykaRozšíření jazykaPodpora elegantního a rychlého typově Podpora elegantního a rychlého typově bezpečného kódubezpečného kódu

Zjednodušení některých úkolů programátoraZjednodušení některých úkolů programátora

Navržen s maximálním důrazem na kompatibilituNavržen s maximálním důrazem na kompatibilitu

Vylepšená produktivitaVylepšená produktivitaRefactoring, Refactoring, kódu a jeho formátováníkódu a jeho formátování

Zdokonalené laděnéZdokonalené laděnéDatatipDatatipyy, , visualizéry …visualizéry …

Page 4: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvod

GenerikaGenerika

Neúplné typyNeúplné typy

Anonymní metodyAnonymní metody

IterátoryIterátory

Další C# rozšířeníDalší C# rozšíření

Novinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005

Refaktoring kóduRefaktoring kódu

ZávěrZávěr

Page 5: Visual Studio 2005:  C#  2.0

Píšeme univerzální kódPíšeme univerzální kód

Knihovny velmi často využívají typKnihovny velmi často využívají typ objectobject

Umožňuje pracovat s daty libovolného typuUmožňuje pracovat s daty libovolného typu

Použit pro položky, parametry a návratové hodnotyPoužit pro položky, parametry a návratové hodnoty

Uvedená technika ale vytváří mnoho problémůUvedená technika ale vytváří mnoho problémů

Chybějící typová kontrola při překladuChybějící typová kontrola při překladu

Lze použít nevhodné nebo nekompatibilní typyLze použít nevhodné nebo nekompatibilní typy

Zbytečná provize při použití hodnotových typůZbytečná provize při použití hodnotových typů

Boxing, unboxing Boxing, unboxing a typová kontrola za běhu a typová kontrola za běhu aplikaceaplikace

Potenciální provize při použití referenčních typůPotenciální provize při použití referenčních typů

Typová kontrola za běhu aplikace při konverzi Typová kontrola za běhu aplikace při konverzi výsledkůvýsledků

Obtěžující a nevzhledné typové konverzeObtěžující a nevzhledné typové konverze

Page 6: Visual Studio 2005:  C#  2.0

PříkladyPříkladyusing System.Collections;using System.Collections;

// // referenční typ – třída referenční typ – třída PracovnikPracovnik

Stack seznam = new Stack();Stack seznam = new Stack();

// // Parametr je typu objectParametr je typu object

// // Proběhne implicitní Proběhne implicitní konverzekonverze

seznam.Push(seznam.Push(

new Pracovnik() );new Pracovnik() );

// // Návratová hodnota je typu Návratová hodnota je typu objectobject

// // Potřebujeme explicitní Potřebujeme explicitní konverzikonverzi

Pracovnik zam =Pracovnik zam =

(Pracovnik) seznam.Pop();(Pracovnik) seznam.Pop();

// // Hodnotový typ - integerHodnotový typ - integer

Stack velikosti = new Stack();Stack velikosti = new Stack();

// // Proběhne BoxingProběhne Boxing

sizes.Push( 42 );sizes.Push( 42 );

// // Proběhne UnboxingProběhne Unboxing

int size1 = (int) sizes.Pop();int size1 = (int) sizes.Pop();

// // Nevhodné a překladač Nevhodné a překladač neodhalíneodhalí

sizes.Push( 77 );sizes.Push( 77 );

sizes.Push( new Pracovnik() );sizes.Push( new Pracovnik() );

// // Překlad v pořádku, ale Překlad v pořádku, ale nastanenastane

// // výjimka výjimka InvalidCastExceptionInvalidCastException

int size2 = (int) sizes.Pop();int size2 = (int) sizes.Pop();

Page 7: Visual Studio 2005:  C#  2.0

GenerikaGenerika

Kód může být parametrizován typovými informacemiKód může být parametrizován typovými informacemiUmožňuje vytváření šablon kóduUmožňuje vytváření šablon kódu

Konkrétní typ zadán až při použitíKonkrétní typ zadán až při použití

Podobné generikům známým z jazyků Podobné generikům známým z jazyků Eiffel Eiffel aa Ada Ada a a C++ C++ šablonámšablonám

Můžeme vytvářet různé typy generikMůžeme vytvářet různé typy generikTřídy, struktury, rozhraní, metody a delegátyTřídy, struktury, rozhraní, metody a delegáty

Významné přínosy při použití generikVýznamné přínosy při použití generikUmožňuje silnou typovou kontrolu v době překladuUmožňuje silnou typovou kontrolu v době překladu

Méně kontroly za běhu aplikace a operací Méně kontroly za běhu aplikace a operací boxing boxing aa unboxing unboxing

Omezení nutnosti explicitních typových konverzíOmezení nutnosti explicitních typových konverzí

Výsledkem je čistější, rychlejší a bezpečnější kódVýsledkem je čistější, rychlejší a bezpečnější kód

Page 8: Visual Studio 2005:  C#  2.0

OmezeníOmezení

Specifikace požadavků na typové parametrySpecifikace požadavků na typové parametryZabezpečuje, že typy poskytují požadovanou Zabezpečuje, že typy poskytují požadovanou funkcionalitufunkcionalituUmožňuje silnější typovou kontrolu při překladuUmožňuje silnější typovou kontrolu při překladuOmezuje potřebu explicitních typových konverzíOmezuje potřebu explicitních typových konverzíMůže omezit použitelnost výsledného generikaMůže omezit použitelnost výsledného generika

Existují tři typy omezeníExistují tři typy omezeníOmezení třídy (Omezení třídy (Class constraintClass constraint))

Zajišťuje odvození od specifické základní třídyZajišťuje odvození od specifické základní třídy

Omezení rozhraní (Omezení rozhraní (Interface constraintInterface constraint))Zajišťuje typům implementaci specifického rozhraníZajišťuje typům implementaci specifického rozhraní

Omezení konstruktoru (Omezení konstruktoru (Constructor constraintConstructor constraint))Zajišťuje existenci veřejného implicitního konstruktoruZajišťuje existenci veřejného implicitního konstruktoru

Page 9: Visual Studio 2005:  C#  2.0

Založení a použití generické třídyZaložení a použití generické třídy

Omezení generikaOmezení generika

Výkonnost kóduVýkonnost kódu

Page 10: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvod

GenerikaGenerika

Neúplné typyNeúplné typy

Anonymní metodyAnonymní metody

IterátoryIterátory

Další C# rozšířeníDalší C# rozšíření

Novinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005

Refaktoring kóduRefaktoring kódu

ZávěrZávěr

Page 11: Visual Studio 2005:  C#  2.0

Neúplné typyNeúplné typyUmožňují rozdělit implementaci do několika souborůUmožňují rozdělit implementaci do několika souborů

Platí pro třídy, struktury a rozhraníPlatí pro třídy, struktury a rozhraníDeklarovány typovým modifikátorem Deklarovány typovým modifikátorem partialpartial

Nabízí několik výhodNabízí několik výhodVětší implementace mohou být rozděleny Větší implementace mohou být rozděleny Uživatelský kód může být oddělen od generovaného kóduUživatelský kód může být oddělen od generovaného kódu

Zabraňuje nástrojům přepsat uživatelské změnyZabraňuje nástrojům přepsat uživatelské změnyVyužito u Využito u WinForms WinForms a silně typových a silně typových DataSetDataSetůů

Více vývojářů může souběžně pracovat na stejném typuVíce vývojářů může souběžně pracovat na stejném typuUmožňuje Umožňuje code-beside code-beside na rozdíl od na rozdíl od code-behindcode-behind

Využito u Využito u ASP.NET 2.0ASP.NET 2.0

Může ulehčit údržbu a řízení změn ve zdrojovém kóduMůže ulehčit údržbu a řízení změn ve zdrojovém kódu

Page 12: Visual Studio 2005:  C#  2.0

Využití neúplných typůVyužití neúplných typů

Rozdělení typu neovlivňuje výsledný kódRozdělení typu neovlivňuje výsledný kódVšechny části musí být při překladu spojenyVšechny části musí být při překladu spojeny

Nelze rozšířit již jednou přeložený typNelze rozšířit již jednou přeložený typ

Kód je kumulativní nebo nekumulativníKód je kumulativní nebo nekumulativníKumulativní elementy jsou spojoványKumulativní elementy jsou spojovány

Metody, položky a rozhraníMetody, položky a rozhraní

Nekumulativní elementy musí být stejné ve všech Nekumulativní elementy musí být stejné ve všech částechčástech

Typ, viditelnost a základní tříduTyp, viditelnost a základní třídu

Class View Class View a navigační lišta zobrazuje vždy a navigační lišta zobrazuje vždy celý typcelý typ

Page 13: Visual Studio 2005:  C#  2.0

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

Page 14: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvodGenerikaGenerikaNeúplné typyNeúplné typyVlastnosti a indexeryVlastnosti a indexeryAnonymní metodyAnonymní metodyIterátoryIterátoryDalší C# rozšířeníDalší C# rozšířeníNovinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005Refaktoring kóduRefaktoring kóduZávěrZávěr

Page 15: Visual Studio 2005:  C#  2.0

Anonymní metodyAnonymní metody

Některý kód je volán pouze přes delegátyNěkterý kód je volán pouze přes delegátyNapř. Např. event handlerevent handleryy a a callbackcallback funkce funkce

Použití tradičních metod se zdá být zbytečnéPoužití tradičních metod se zdá být zbytečné

Anonymní metody poskytují elegantní řešeníAnonymní metody poskytují elegantní řešeníUmožňuje psát kód delegátů jako Umožňuje psát kód delegátů jako ‘in-line’‘in-line’

Lze použít všude kde je očekáván delegátLze použít všude kde je očekáván delegátVčetně argumentů metodVčetně argumentů metod

Vytváří se klíčovým slovem Vytváří se klíčovým slovem delegatedelegate

Podobný lambda funkcím v jazycích Podobný lambda funkcím v jazycích Python Python a Lispa Lisp

Opřen o implicitní konverzi na typ delegateOpřen o implicitní konverzi na typ delegateVyžaduje kompatibilní seznam parametrů a Vyžaduje kompatibilní seznam parametrů a návratovou hodnotunávratovou hodnotu

Page 16: Visual Studio 2005:  C#  2.0

Parametry a stavParametry a stavSeznam parametrů lze vynechat, pokud není Seznam parametrů lze vynechat, pokud není požadovánpožadován

Považován kompatibilní se všemi delegáty kromě těch, kteří Považován kompatibilní se všemi delegáty kromě těch, kteří mají mají out out parametryparametryOdlišný od prázdného seznamu parametrů deklarovaného jako Odlišný od prázdného seznamu parametrů deklarovaného jako ‘()’‘()’Musí se stejně dodat, ve chvíli kdy je delegát volánMusí se stejně dodat, ve chvíli kdy je delegát volán

Lze přistupovat k lokálnímu stavu zaobalující metodyLze přistupovat k lokálnímu stavu zaobalující metodyZahrnuje lokání proměnné a parametryZahrnuje lokání proměnné a parametryNazýváme je vnější (Nazýváme je vnější (outerouter) proměnné anonymních metod) proměnné anonymních metodVnější proměnné, na které se odkazujeme, se nazývají Vnější proměnné, na které se odkazujeme, se nazývají zachycené (zachycené (capturedcaptured))Životnost zachycených vnějších proměnných je prodlouženaŽivotnost zachycených vnějších proměnných je prodloužena

Alespoň po dobu životnosti anonymní metodyAlespoň po dobu životnosti anonymní metody

Page 17: Visual Studio 2005:  C#  2.0

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

Page 18: Visual Studio 2005:  C#  2.0

AgendaAgendaÚvodÚvodGenerikaGenerikaNeúplné typyNeúplné typyAnonymní metodyAnonymní metodyIterátoryIterátoryDalší C# rozšířeníDalší C# rozšířeníNovinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005Refaktoring kóduRefaktoring kóduZávěrZávěr

Page 19: Visual Studio 2005:  C#  2.0

Průchod kolekcíPrůchod kolekcí

Obecný požadavek na práci s kolekcíObecný požadavek na práci s kolekcíC# C# obsahujeobsahuje výraz výraz foreachforeach pro zjednodušení procesu pro zjednodušení procesu

Prochází po jednotlivých položkách vhodné kolekceProchází po jednotlivých položkách vhodné kolekce

Kolekce typicky implementují Kolekce typicky implementují IEnumerableIEnumerableEnumerovatelné typy typicky implementují Enumerovatelné typy typicky implementují IEnumeratorIEnumerator

Můžeme používat silně typový kód místo rozhraníMůžeme používat silně typový kód místo rozhraní

Enumerační kód je někdy obtížné napsatEnumerační kód je někdy obtížné napsat

// System.Collections// System.Collections

public interface IEnumerablepublic interface IEnumerable

{{

IEnumeratorIEnumerator

GetEnumerator();GetEnumerator();

}}

public interface IEnumeratorpublic interface IEnumerator

{{

object Current { get; }object Current { get; }

bool MoveNext();bool MoveNext();

void Reset();void Reset();

}}

Page 20: Visual Studio 2005:  C#  2.0

IterátorIterátorBlok příkazů, které vytvoří seřazenou sekvenciBlok příkazů, které vytvoří seřazenou sekvenci

Vyznačuje se jedním nebo více výrazyVyznačuje se jedním nebo více výrazy yieldyieldyield returnyield return vytváří další hodnotu iteracevytváří další hodnotu iteraceyield breakyield break indikuje ukončení iteraceindikuje ukončení iterace

Může jít o tělo metody, pokud vrací odpovídající Může jít o tělo metody, pokud vrací odpovídající rozhranírozhraní

IEnumerator[< T >] IEnumerator[< T >] nebonebo IEnumerable[< T >] IEnumerable[< T >]Kompilátor generuje většinu kóduKompilátor generuje většinu kódu

Implementaci enumerátoruImplementaci enumerátoruVnořené třídy pro uchování stavu iteraceVnořené třídy pro uchování stavu iterace

Každý iterátor má svůj vlastní stavKaždý iterátor má svůj vlastní stavOdstraňuje problémy způsobné kolizemi iterátorůOdstraňuje problémy způsobné kolizemi iterátorů

Page 21: Visual Studio 2005:  C#  2.0

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

Page 22: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvod

GenerikaGenerika

Neúplné typyNeúplné typy

Anonymní metodyAnonymní metody

IterátoryIterátory

Další C# rozšířeníDalší C# rozšíření

Novinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005

Refaktoring kóduRefaktoring kódu

ZávěrZávěr

Page 23: Visual Studio 2005:  C#  2.0

Modifikátory viditelnostiModifikátory viditelnostiVe verzi 2.0 lze odlišit mezi viditelností přístupových Ve verzi 2.0 lze odlišit mezi viditelností přístupových metod u vlastností a indexerůmetod u vlastností a indexerů

Běžné je požadovat Běžné je požadovat public get public get avšak avšak protected setprotected set

Lze modifikovat jednu nebo obě přístupové metodyLze modifikovat jednu nebo obě přístupové metodyZbývající metoda přebere viditelnost z deklarace vlastnosti nebo Zbývající metoda přebere viditelnost z deklarace vlastnosti nebo indexeruindexeru

Viditelnost lze pouze více omezitViditelnost lze pouze více omezit

public int this[ int i ]public int this[ int i ]

{{

get { return this.a[ i ]; }get { return this.a[ i ]; }

protected protected set { this.a[ i ] = value; }set { this.a[ i ] = value; }

}}

Page 24: Visual Studio 2005:  C#  2.0

Dedukce delegátůDedukce delegátůPřekladač nyní umí odhadnout instanci Překladač nyní umí odhadnout instanci delegátadelegáta

Používá stejný mechanismus jako u anonymních Používá stejný mechanismus jako u anonymních metodmetod

Umožňuje přímé přiřazení metody instanci delegátaUmožňuje přímé přiřazení metody instanci delegátaImplicitně převedena na kompatibilní typ delegátaImplicitně převedena na kompatibilní typ delegáta

Ve většině případů lze vypustit explicitní založeníVe většině případů lze vypustit explicitní založení

Poskytuje elegantní syntaxi založení delegátůPoskytuje elegantní syntaxi založení delegátů

// C# 1.0// C# 1.0

this.Load += new EventHandler(this.Load += new EventHandler(

this.FormLoad );this.FormLoad );

this.Update( new this.Update( new CallBack( this.MyMethod ) );CallBack( this.MyMethod ) );

// C# 2.0// C# 2.0

this.Load += this.FormLoad;this.Load += this.FormLoad;

this.Update( this.MyMethod );this.Update( this.MyMethod );

Page 25: Visual Studio 2005:  C#  2.0

Statické třídyStatické třídy

Formalizuje existující návrhový vzorFormalizuje existující návrhový vzorSealed class Sealed class s privátním konstruktorem a statickými s privátním konstruktorem a statickými členyčleny

Vhodné pro pomocné třídy a „globální“ metodyVhodné pro pomocné třídy a „globální“ metody

Překladač vynutí dodržení pravidelPřekladač vynutí dodržení pravidelZajistí, že neexistují členské metody a dataZajistí, že neexistují členské metody a data

Brání založení instance a dědičnostiBrání založení instance a dědičnostiStatické třídy musí být odvozeny ze třídy Statické třídy musí být odvozeny ze třídy objectobject

static class Utilitystatic class Utility

{{

public static voidpublic static void

ActivateLicence() {}ActivateLicence() {}

}}

// // ChybaChyba!!

static class Tool : Utility {}static class Tool : Utility {}

// // ChybaChyba!!

Utility u = new Utility();Utility u = new Utility();

Page 26: Visual Studio 2005:  C#  2.0

Alias Alias kvalifikátorkvalifikátor

Nový kvalifikátor pro Nový kvalifikátor pro globální jmenný prostorglobální jmenný prostor

Nový operátor Nový operátor ‘‘::::’’

Aplikován na aliasy a Aplikován na aliasy a jmenné prostoryjmenné prostory

Alias Alias globalglobal se se odkazuje na kořen odkazuje na kořen jmenného prostorujmenného prostoru

Řeší různé problémy s Řeší různé problémy s rozlišením jménarozlišením jména

Vhodné pokud jedna Vhodné pokud jedna entita překrývá jinouentita překrývá jinou

Podobné Podobné C++ scope C++ scope resolution resolution operátoruoperátoru

// C# 2.0// C# 2.0

using System;using System;

namespace Imagingnamespace Imaging

{{

public class Console {}public class Console {}

public class Systempublic class System

{{

public void Demo()public void Demo()

{{

// // ChybaChyba!!

Console.Write("6x9");Console.Write("6x9");

// OK// OK

global::System.Consoleglobal::System.Console

.Write("42");.Write("42");

}}

}}

}}

Page 27: Visual Studio 2005:  C#  2.0

#pragma#pragma

Nová direktivaNová direktiva #pragma#pragma

Používá se pro vydávání speciální instrukcí Používá se pro vydávání speciální instrukcí překladačipřekladači

Aktuálně podporovány pouze „Aktuálně podporovány pouze „warning pragmawarning pragma““Umožňuje zakázat nebo povolit varování překladačeUmožňuje zakázat nebo povolit varování překladače

Využívá čárkami oddělený seznam varováníVyužívá čárkami oddělený seznam varování

Neuvádějte "Neuvádějte "CSCS"" před číslem varování před číslem varování

// // ZakážeZakáže warning CS0169 warning CS0169

#pragma warning disable 0169#pragma warning disable 0169

// // Negeneruje Negeneruje warningwarning

int i;int i;

// // ZapneZapne warning CS0169 warning CS0169

#pragma warning restore 0169#pragma warning restore 0169

// // Generuje Generuje Warning CS0169Warning CS0169

int j = 1;int j = 1;

Page 28: Visual Studio 2005:  C#  2.0

Typy s hodnou NullTypy s hodnou NullNelze přiřadit null hodnotovým typůmNelze přiřadit null hodnotovým typům

Problém pokud chápeme null jako „bez Problém pokud chápeme null jako „bez hodnoty“ místo „bez odkazu“hodnoty“ místo „bez odkazu“

Databázové sloupce s hodnotovými typy Databázové sloupce s hodnotovými typy mohou mít hodnotu nullmohou mít hodnotu null

Řešení Řešení – nullable typ– nullable typyy

Nullable<T> Nullable<T> mohou uchovat hodnotu nullmohou uchovat hodnotu null

Nová syntaxe s operátorem ?Nová syntaxe s operátorem ?

Page 29: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvod

GenerikaGenerika

Neúplné typyNeúplné typy

Anonymní metodyAnonymní metody

IterátoryIterátory

Další C# rozšířeníDalší C# rozšíření

Novinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005

Refaktoring kóduRefaktoring kódu

ZávěrZávěr

Page 30: Visual Studio 2005:  C#  2.0

Vlastnosti prostředíVlastnosti prostředíOmezení verze jazyka Omezení verze jazyka ((Build|AdvancedBuild|Advanced))

Implicitně 2.0, ale lze omezit na ISO-1 (1.0)Implicitně 2.0, ale lze omezit na ISO-1 (1.0)

Formátování kódu Formátování kódu ((Tools|Options|Text Editor|C#|FormattingTools|Options|Text Editor|C#|Formatting))

Individuální nastavení pro jednotlivé elementy Individuální nastavení pro jednotlivé elementy jazyka doprovozené názorným příklademjazyka doprovozené názorným příkladem

Export a import nastavení Export a import nastavení ((Tools|Import/Export Settings…Tools|Import/Export Settings…))

Možnost přenášení a sdílení nastavení ve Možnost přenášení a sdílení nastavení ve skupině programátorů a mezi počítačiskupině programátorů a mezi počítači

Page 31: Visual Studio 2005:  C#  2.0

Novinky editoruNovinky editoruNavigaceNavigace

Zaznamenávají se všechny pohyby v/po Zaznamenávají se všechny pohyby v/po souborech a mezi projektysouborech a mezi projekty

Možnost pohybu jako v IE (vpřed/vzad)Možnost pohybu jako v IE (vpřed/vzad)

Práce se záložkami (otevřenými soubory)Práce se záložkami (otevřenými soubory)Close All But ThisClose All But This, , Copy Full PathCopy Full Path, …, …

Vyřešení nejasných typůVyřešení nejasných typůPřidá výraz Přidá výraz usingusing nebo FQN nebo FQN

Za předpokladu existující reference v projektuZa předpokladu existující reference v projektu

Page 32: Visual Studio 2005:  C#  2.0

Novinky editoru Novinky editoru …pokračování…pokračování

Code Definition oknoCode Definition oknoZobrazuje definici toho co editujeme, read-onlyZobrazuje definici toho co editujeme, read-only

Sledování změnSledování změnŽluté – přidáno/nepřeloženo, Zelené – Žluté – přidáno/nepřeloženo, Zelené – přidáno/přeloženo přidáno/přeloženo

Code SnippetCode SnippetTypické kusy kódu, které často píšemeTypické kusy kódu, které často píšemeKonstrukce typu if-else, foreach, class, …Konstrukce typu if-else, foreach, class, …Lze vytvořit vlastníLze vytvořit vlastníSurround with – označený blok kódu lze umístit do Surround with – označený blok kódu lze umístit do těla snippetutěla snippetu

Page 33: Visual Studio 2005:  C#  2.0

Novinky editoru - laděníNovinky editoru - laděníInstant watchInstant watchVizualizéryVizualizéry

Přirozeně zobrazují složité proměnnéPřirozeně zobrazují složité proměnnéDataset, Data Table, Text, XML, HTML, vlastní …Dataset, Data Table, Text, XML, HTML, vlastní …

VS HostVS HostAplikační assembly jsou při ladění zavedeny do Aplikační assembly jsou při ladění zavedeny do <app>.vshost.exe<app>.vshost.exe

Partial trust debuging, rychlejší startPartial trust debuging, rychlejší start

Edit-and-ContinueEdit-and-ContinuePodobné VC++ 6.0Podobné VC++ 6.0Nelze provést jakoukoli změnu ovlivňující metadataNelze provést jakoukoli změnu ovlivňující metadata

Přidat/ubrat metody, parametry, veřejné položkyPřidat/ubrat metody, parametry, veřejné položky

Page 34: Visual Studio 2005:  C#  2.0

Nové vlastnosti prostředí editoruNové vlastnosti prostředí editoru

Nové vlastnosti laděníNové vlastnosti ladění

Page 35: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvod

GenerikaGenerika

Neúplné typyNeúplné typy

Anonymní metodyAnonymní metody

IterátoryIterátory

Další C# rozšířeníDalší C# rozšíření

Novinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005

Refaktoring kóduRefaktoring kódu

ZávěrZávěr

Page 36: Visual Studio 2005:  C#  2.0

Co je to refaktoringCo je to refaktoring??

Změna struktury kódu bez vlivu na to co Změna struktury kódu bez vlivu na to co děládělá

Extrakce metodyExtrakce metody

Zaobalení položkyZaobalení položky

Extrakce rozhraníExtrakce rozhraní

PřejmenováníPřejmenování

Změna deklarace (podpisu)Změna deklarace (podpisu)

Extrakce parametruExtrakce parametru

ExpanzeExpanze

Napříč všemi projekty v řešeníNapříč všemi projekty v řešení

Page 37: Visual Studio 2005:  C#  2.0

RefaktoringRefaktoring

Page 38: Visual Studio 2005:  C#  2.0

AgendaAgenda

ÚvodÚvod

GenerikaGenerika

Neúplné typyNeúplné typy

Anonymní metodyAnonymní metody

IterátoryIterátory

Další C# rozšířeníDalší C# rozšíření

Novinky v prostředí Visual Studio 2005Novinky v prostředí Visual Studio 2005

Refaktoring kóduRefaktoring kódu

ZávěrZávěr

Page 39: Visual Studio 2005:  C#  2.0

ZávěremZávěrem

Rozšíření jazyka C# Rozšíření jazyka C# Významně posilují produktivitu a bezpečnost Významně posilují produktivitu a bezpečnost vytvoření kóduvytvoření kódu

Navazují a podporují aktuální programovací Navazují a podporují aktuální programovací praktikypraktiky

Novinky ve vývojovém prostředí Visual Novinky ve vývojovém prostředí Visual Studio 2005 Studio 2005

Zjednodušují a urychlují práci při psaní kóduZjednodušují a urychlují práci při psaní kódu

Významně zpříjemňují proces laděníVýznamně zpříjemňují proces ladění

Page 40: Visual Studio 2005:  C#  2.0

Informační zdrojeInformační zdrojeC# Developer Center C# Developer Center nana MSDN MSDNhttp://msdn.microsoft.com/vcsharphttp://msdn.microsoft.com/vcsharp

C# Team Member BlogsC# Team Member Blogshttp://msdn.microsoft.com/vcsharp/team/blogs/http://msdn.microsoft.com/vcsharp/team/blogs/

Page 41: Visual Studio 2005:  C#  2.0