visual studio 2005: c# 2.0
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 PresentationTRANSCRIPT
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.
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
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 …
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
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
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();
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
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
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
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
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
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
Založení a použité neúplného typuZaložení a použité neúplného typu
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
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
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
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é
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
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();
}}
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ů
Vytvoření a použití iterátoru kolekceVytvoření a použití iterátoru kolekce
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
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; }
}}
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 );
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();
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");
}}
}}
}}
#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;
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 ?
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
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
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
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
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
Nové vlastnosti prostředí editoruNové vlastnosti prostředí editoru
Nové vlastnosti laděníNové vlastnosti ladění
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
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í
RefaktoringRefaktoring
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
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í
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/