Vous êtes sur la page 1sur 473
Saufmentioncontraire,lecontenudecetouvrageestpubliésouslalicence: CreativeCommonsBY-NC-SA2.0

Saufmentioncontraire,lecontenudecetouvrageestpubliésouslalicence:

CreativeCommonsBY-NC-SA2.0

Lacopiedecetouvrageestautoriséesousréservedurespectdesconditionsdelalicence

Textecompletdelalicencedisponiblesur:http://creativecommons.org/licenses/by-nc-

Conceptioncouverture:SophieBai

Illustrationschapitres:FanJiyong

OpenClassrooms2015-ISBN:979-10-90085-84-8

Préface

C#.NETestlelangagedeprogrammationpharedeMicrosoft.Ilaétédéveloppédansle

butdepouvoircréerfacilementdiverstypesd’applicationsentirantlemeilleurdes

produitsettechnologiesMicrosoft.

Lescréateursdulangagesesontinspirésdeslangagesexistantsens’attachantàretenirle meilleurdechacund’eux.Aussin’est-cepasétonnantderetrouveruntypagefort,une approcheorientéeobjetetunesyntaxerappellantàlafoiscelleduC++etduJava.C\#

.NETestapparuen2000etdepuis,necessed’évolueraurythmedesdifférentesversions

duFramework.NET.LecoupleC\#etFramework.NETenglobelesdernièresavancées

deslangagesdeprogrammation(Generic,Lambda,Inférencedetype,Linq…).Ces

améliorations,fortementinspiréesdeslangagesditsfonctionnels,fontdeC\#undes

langageslesplusmodernesetaboutis,sansquejamaislaproductivitéetlasoliditédu

codenesoientcompromis.Aujourd’hui,C\#.NETestdeplusenplusutilisédansle

mondeprofessionnel.Sapuissanceetsoninteropérabilitéaveclesproduitsettechnologies

Microsoftfontdeluiunlangagesûretpérenne.Celangageprésenteenoutrel’intérêtde

nepasêtrepropriétairepuisquesesspécificationspermettentdevoirapparaîtredes

initiatives(commeparexempleMono),lecodeC\#pouvantainsitournersurdes

distributionsLinux.Ilestpossiblededéveloppertoutessortesd’applications:jeux,

applicationsdegestion,interfacestactiles,XAMLouapplicationspourtéléphones.

N’oublionspaslemondeembarquéavecleMicroFramework.NETainsiqueleWebavec

ASP.NET.Bref,C\#estunlangagetoutterrain,ouvrantunegammedepossiblesunique

surlaplateformeMicrosoft.

Celivreseveutsimpleetfaciled’accès.IlallielesconnaissancesdeNicolasHilaire,

spécialistedecestechnologiesetMVPMicrosoft(MostValuableProfessional),experten

technologiesMicrosoft.},aveccellesdescréateursduSiteduZéro,réputésdepuisde

nombreusesannéespourleurapprochepédagogiqueetaccessibleàtouslesdébutants.Ce

livreestdonctoutindiquépourceuxquiveulentseformerfacilementàlaprogrammation

C\#.NET.

ÉricMittelette

ResponsabledesrelationstechniquesaveclesdéveloppeurschezMicrosoftFrance

Avantpropos

Quandj’aicommencélaprogrammation,j’avaisdixansetunAtariSTpossédantun interpréteurGFABasic.Mesparentsm’avaientachetéunlivrecontenantdeslistingsà recopieretàexécuter.Simessouvenirsnemetrahissentpas,ils’agissaitpourlaplupart d’applicationspermettantdegérerlecontenudesonfrigooudesacaveàvins.Quelques petitsjeuxtrèssimplesetpeugraphiquesvenaientagrémenterlelot.Pourfaire fonctionnercesprogrammes,ilfallaittoutrecopieràlamain(ouplutôtauclavier), généralementquelquescentainesdelignesdecode.Régulièrement,celanefonctionnait pascarjefaisaisuneerreurdecopie,inversantdesparenthèsesououbliantdesmots.À partvérifiertoutlelistingligneparligne,jen’avaisplusqu’àpasseraulistingsuivant! Parfois,meseffortsétaientrécompensésmêmesijenecomprenaisstrictementrienàce

quejerecopiais.Jemerappelled’unsuperbelabyrintheen3dimensions,quoiquemes

souvenirsluirendentcertainementunhommageplusencouleurqu’ilneleméritait!Ces

listingsremplisdemotsmagiquesm’ontdonnéenviedecomprendrecommentcela

fonctionnait.J’aidoncprismoncourageàdixdoigtsettentédecréermespropres

programmesenisolantlespartiesquimeparaissaientsimples.Afficher«Bonjour

commentallez-vous»etpouvoir«discuter»avecl’ordinateurgrâceàunalgorithmede

moncruontétéundemespremierssouvenirsdeprogrammeréussi.Àcetteépoque

reculée,iln’existaitpasdemoyend’apprendrefacilementlaprogrammation.Iln’yavait

pasinternet…ehoui,cetteépoqueaexisté!Durantmonadolescencej’aicontinuémon

apprentissageenessayantdifférentslangages,commeleC++oul’assembleur,leturbo

pascaletautresjoyeusetés.Laplupartétaientinaccessibles,notammentleC++.Quelques

livresenbibliothèqueontfinidanslamiennemaisilsétaienttousbien

incompréhensibles…jemesouviensmêmed’unlivrequipromettaitdepouvoircréerun

jeu«facilement».Celanedevaitpasêtresifacilequeçavumonairhébétéaprèsla

lecturedulivre!Celamanquaitd’unsitecommeOpenClassroomsoùtoutestexpliquéde

zéropourlespersonnes,commej’aipul’être,curieusesdeselancerdanslemonde

magiquedudéveloppement.

OnparleduC#?

J’yviens!C’estdanscetteoptiquequej’aicommencéàécrire.Pouvoirpartagermes

connaissancessouventdurementacquisesetaiderceuxquiontdumalàselancer.Etc’est

vraiquecen’estpasfacile,malgrétoutelabonnevolontédumonde.Sansune

méthodologiesimpleetdesexplicationsclaires,iln’estpasaisédeselancersanssesentir

perdu.C’estlàoùj’espèrepouvoirfairequelquechoseàtraverslacollectiondesLivres

d’OpenClassrooms.Aprèstousmesessaisdejeunesse,mesétudesetmonentréedansle

mondedutravail,j’aiacquisunecertaineexpériencedesdifférentslangagesde

programmation.J’aiprisgoûtàl’écritureencommençantàrédigerdesarticlesavecmon

langagepréférédel’époque,leC++.Aujourd’hui,c’estleC#quioccupecetteplace

prestigieusedansmonclassementultra-personneldeslangagesdeprogrammation!C’est

doncl’occasiondepouvoirmettreàprofitcettevolontédepartagedeconnaissancesetce

goûtpourlarédaction,dansunouvragepermettantd’apprendreleC#etquiestdestiné

auxdébutants.

Qu’allez-vousapprendreenlisantcelivre?

NousallonsapprendrelelangagedeprogrammationC#defaçonprogressiveaucoursde

cetouvrage,composédespartiessuivantes:

LesrudimentsdulangageC#:nouscommenceronspardécouvrirlesbasesdu

langageC#.Nouspartonsvraimentdesbases:commentestconstruiteune

applicationinformatique?Quelslogicielsdois-jeinstaller?Quellessontles

instructionsdebaseduC#?Nousallonsdécouvrirtoutcelaaucoursdecette

premièrepartiequipermettradeposerlesbriquesdenospremièresapplications.

UnpeuplusloinavecleC#:danscettepartie,nousallonscontinueràapprofondir

nosconnaissancesavecleC#.Nousdécouvrironslespremièresinteractionsavec

l’utilisateurdenosprogrammes.Commentliresimplementunesaisieclavier?

Commentlirelecontenudelalignedecommande?Nousdécouvrironscela,avecen

complémentdesTPpournousentraîner.

LeC#,unlangageorientéobjet:ici,leschosessérieusescommencentetnous

allonsvoircequ’estlaprogrammationorientéeobjetetcommentleC#répondàce

genredeprogrammation.Chapitreunpeuplusavancéoùvousdécouvrireztoutela

puissancedulangageetoùvousvousrendrezcomptedel’étenduedespossibilitésdu

C#!

C#Avancé:fortsdenosconnaissancesacquisesprécédemment,nousétudieronsdes

pointsplusavancésdanscetultimechapitre.Nousverronscommentaccéder

efficacementauxdonnéesgrâceàLINQetcommentutiliserunebasededonnées

avecEntityFramework.Nousverronségalementd’autresaspectspermettantd’être

encoreplusefficacesavecvosdéveloppements.

Àlafindecetouvrage,vousaurezacquistouteslesbasesvouspermettantdevouslancer

sansappréhensiondanslemondedudéveloppementd’applicationsprofessionnellesavec

leC#.Vousdécouvrirezenbonusunaperçudesdifférentesapplicationsquel’onpeut

réaliseravecleC#.

Commentlirecelivre?

Espritdulivre

Oui,oui,vousavezbienlu,celivreestpourlesdébutants.Pasbesoind’avoirfaitdu

développementauparavantpourpouvoirlirecetouvrage!Jevaisdoncfairedemon

mieuxpourdétailleraumaximummesexplications,c’estpromis.Biensûr,ilyenapeut-

êtreparmivousquiontdéjàfaitduC,duC++,duJava…Évidemment,sivousavezdéjà

faitdudéveloppementinformatique,ceseraplusfacilepourvous.Attentionnéanmoinsde

nepasallertropvite:leC#ressembleàd’autreslangagesmaisilaquandmêmeses

spécificités!Nousallonsdécouvrirensembledenombreuseschosesenapprenantà

développerenC#.IlyaurabienentendudesTPpourvousfairepratiquer,afinquevous

puissiezvousrendrecomptedecequevousêtescapablesdefaireaprèsavoirluplusieurs

chapitresplusthéoriques.Néanmoins,jeveuxquevoussoyezactifs!Nevouscontentez

pasdelirepassivementmesexplications,mêmelorsqueleschapitressontplutôt

théoriques!Testezlescodesetlesmanipulationsaufuretàmesure.Essayezlespetites

idéesquevousavezpouraméliorerouadapterlégèrementlecode.Sortezunpeudes

sentiersbattusdututoriel:celavousferapratiqueretvouspermettradedécouvrir

rapidementsivousavezcomprisounonlechapitre.Pasd’inquiétude,sijamaisvous

bloquezsurquoiquecesoitquin’estpasexpliquédanscecours,lacommunautéqui

sillonnelesforumsd’OpenClassroomssauravousapportersonaideprécieuse.

Suivezl’ordredeschapitres

Lisezcelivrecommeonlitunroman.Ilaétéconçupourcela.Contrairementàbeaucoup

delivrestechniquesoùilestcourantdelireendiagonaleetdesautercertainschapitres,il

esticitrèsfortementrecommandédesuivrel’ordreducours,àmoinsquevousnesoyez

déjàunpeuexpérimentés.

Pratiquezenmêmetemps

Pratiquezrégulièrement.N’attendezpasd’avoirfinidelirecelivrepourallumervotre

ordinateuretfairevospropresessais.

Celivreestissud’OpenClassrooms

CetouvragereprendlecoursC#d’OpenClassroomsdansuneéditionrevueetcorrigée,

augmentéedenouveauxchapitresplusavancésetdesnotesdebasdepage.Ilreprendles

élémentsquiontfaitlesuccèsdescoursdusite,àsavoirleurapprocheprogressiveet

pédagogique,leurtondécontracté,ainsiquelesTPvouspermettantdepratiquerdefaçon

autonome.Celivres’adressedoncàtoutepersonnedésireused’apprendrelesbasesdela

programmationenC#,quecesoit:

parcuriosité;programmationenC#,quecesoit: parintérêtpersonnel; parbesoinprofessionnel.

parintérêtpersonnel;programmationenC#,quecesoit: parcuriosité; parbesoinprofessionnel.

parbesoinprofessionnel.programmationenC#,quecesoit: parcuriosité; parintérêtpersonnel;

Remerciements

Jesouhaiteremercieruncertainnombredepersonnesqui,deprèsoudeloin,ont

contribuéàlanaissancedecetouvrage:

mafemmeDelphinequimesoutientauquotidienetm’offrechaquejouruneraison

d’avancerdanslavieàsescôtés;

Jérémie,mon«ami-témoin-compagnon-de-dev’»,quiabienvoulureliremes

premiersessaisetquiatoujoursunenouvelleidéeàdévelopper;

Anna,Jonathan,Mathieu,Pierreettoutel’équipedeSimpleIT;

touslesrelecteursetparticulièrementJulienPatte(aliasOrwell),quim’adonné

d’excellentsconseils;

tousleslecteursquiontcontribuéàsonaméliorationgrâceàleurscommentaires

précieuxetleurenviedevoirlelivreterminé.

Bonnelecture!

Premièrepartie

LesrudimentsdulangageC#

Chapitre1

IntroductionauC#

IntroductionauC# Danscetoutpremierchapitre,nousallonsdécouvrircequ’estleC#,sonhistoireetson

Danscetoutpremierchapitre,nousallonsdécouvrircequ’estleC#,sonhistoireetson

rapportavecleframework.NET.D’ailleurs,vousnesavezpascequ’estunframework?

Cen’estpasgrave,toutceciseraexpliqué!

Nousverronsdanscechapitrecequesontlesapplicationsinformatiquesetcommentdes

langagesdeprogrammationévoluéscommeleC#nouspermettentderéaliserdetelles

applications.

Etcen’estqueledébut…alorsouvrezgrandsvosyeux,chaussezvoslunetteset

exploronscemondemerveilleux!

Avantpropos

Aquis’adressecetutoriel?

Auxdébutants!Pasbesoind’avoirfaitdudéveloppementavantpoursuivrecetutoriel!

Jevaisdoncfairedemonmieuxpourdétailleraumaximummesexplications,c’est

promis.

Monbutestréellementderendrecetutorielaccessiblepourlesdébutants.

Biensûr,ilyenapeut-êtreparmivousquiontdéjàfaitduC,duC++,duJava…

Evidemment,sivousavezdéjàfaitdudéveloppementinformatique,ceseraplusfacile

pourvous(surtoutpourlapremièrepartiequiprésentelesbasesdulangage).Attention

néanmoinsdenepasvouloirallertropvite:leC#ressembleàd’autreslangagesmaisila

quandmêmesesspécificités!

Espritdututoriel

NousallonsdécouvrirensembledenombreuseschosesenapprenantàdévelopperenC#.

IlyaurabienentendudesTPpourvousfairepratiquer,afinquevouspuissiezvousrendre

comptedecequevousêtescapablesdefaireaprèsavoirluplusieurschapitresplus

théoriques.

Néanmoins,jeveuxquevoussoyezactifs!Nevouscontentezpasdelirepassivement

mesexplications,mêmelorsqueleschapitressontplutôtthéoriques!Testezlescodeset

lesmanipulationsaufuretàmesure.Essayezlespetitesidéesquevousavezpour

améliorerouadapterlégèrementlecode.Sortezunpeudessentiersbattusdututoriel:

celavousferapratiqueretvouspermettradedécouvrirrapidementsivousavezcompris

ounonlechapitre.

Pasd’inquiétude,sijamaisvousbloquezsurquoiquecesoitquin’estpasexpliquédans

cecours,lacommunautéquisillonnelesforumssauravousapportersonaideprécieuse.

Duréed’apprentissage

Ilfautcompterplusieurssemainespourlire,comprendreetassimilercetutoriel.Unefois

assimiléestouteslesnotionsprésentées,ilvousfaudraplusieursmoispouratteindreun

niveausolideenC#.Aprèstout,c’estenforgeantqu’ondevientforgeron.

D’ailleursmercidem’informerdutempsquevousaprislalecturedececourspour

quejepuisseindiquerauxautreslecteursuneduréemoyennedelecture.

C’esttout?

Nonrassurez-vous,letutorielestloind’êtrefini,vousnevoyezdoncpastoutesles

parties.VousdécouvrirezdanscetutorielledébutdesrudimentsdudéveloppementenC#.

Petitàpetitjecompléterailetutorielpourajouterlasuitedesrudimentsdulangage.

Ensuite,jeprésenterailaprogrammationorientéeobjetetcommentenfaireavecleC#.

Enfin,pourallerplusloin,nousétudieronsl’accèsauxdonnéesetd’autressurprises

encore.

Ledébutdececoursseraplutôtthéorique.Poursavoircoder,ilfautcommencerpar

apprendrelesbasesdulangage,c’estunpassageobligé.

Petitàpetitj’introduirailapratiquepourillustrercertainspointsimportants;celavous

permettrademieuxcomprendredesfonctionnementsetsurtoutdebienmémoriserle

cours.

Allezplusloin!

N’hésitezpasàregarderd’autrestutorielsportantsurlesujet.Ilesttoujoursbonde

diversifiersessourcespouravoirdifférentesapprochesdusujet.

Demanièregénérale,jevousrecommandedenepashésiteràtesterlescodesqueje

présenteraiaufuretàmesure.Surtout,sivousavezdesidéespourlesaméliorerunpeu,

faites-le!Canemarcherapasàtouslescoups,maiscelavousferabeaucoupplus

progresserquevousnelepensez!NecomptezdoncpasuniquementsurlesTPpour

pratiquer,ceseraitdommage.

Sachezaussiquejesuisouvertàtoutesremarques,critiques,questions,…portantsurce

tutoriel.N’hésitezdoncpasàposterdescommentaires,surtoutsivotremessagepeutêtre

utilepourd’autrespersonnes.Parcontre,veuilleznepasm’envoyerdeMP,saufencasde

forcemajeure,parcequejen’auraipasletempsdevousrépondreindividuellement,etque

s’ils’agitd’unedemanded’aide,lesforumssontlàpourçaetonvousyrépondraplus

rapidementquemoi.

Qu’est-cequeleC#?

LeC#estunlangagedeprogrammationcrééparMicrosoften2002.

LeC#estunlangagedeprogrammationcrééparMicrosoften2002.

Unlangagedeprogrammationestunensembled’instructions,c’est-à-direun

ensembledemotsquipermettentdeconstruiredesapplicationsinformatiques.

Cesapplicationsinformatiquespeuventêtredebeaucoupdesortes,parexempleune applicationWindows,commeunlogicieldetraitementdetexteouunecalculatriceou encoreunjeudecartes.Onlesappelleégalementdesclientslourds.Ilestégalement possiblededévelopperdesapplicationsweb,commeunsited’e-commerce,unintranet, …Nouspourronsaccéderàcesapplicationsgrâceàunnavigateurinternetquel’on appelleunclientléger.Toujoursgrâceàunnavigateurinternet,nouspourronsdévelopper desclientsriches.Cesontdesapplicationsquiserapprochentd’uneapplicationWindows maisquifonctionnentdansunnavigateur. Biend’autrestypesd’applicationspeuventêtreécritesavecleC#,citonsencorele

développementd’applicationsmobilessousWindowsphone7,dejeuxouencorele

développementdewebservices…

Nousverronsunpeuplusendétailenfindetutorielcommentréaliserdetelles

applications.Chacundecesdomainesnécessiteuntutorielentierpourêtrecomplètement

traité,aussinousnousinitieronsàcesdomainessansallertroploinnonplus.

LeC#estunlangagedontlasyntaxeressembleunpeuauC++ouauJavaquisont

d’autreslangagesdeprogrammationtrèspopulaires.LeC#estlelangagepharede

Microsoft.Ilfaitpartied’unensembleplusimportant.Ilestenfaitunebriquedecequ’on

appellele«Framework.NET».

Gardonsencoreunpeudesuspenssurcequ’estleframework.NET,nousdécouvrironsce

quec’estunpeuplusloindansletutoriel.

Commentsontcrééeslesapplicationsinformatiques?

Uneapplicationinformatique:qu’est-cequec’est?

Commevouslesavez,votreordinateurexécutedesapplicationsinformatiquespour

effectuerdestâches.Cesontdeslogicielscomme:

Untraitementdetexte

Untraitementdetexte

Unnavigateurinternet

Unnavigateurinternet

Unjeuvidéo

Unjeuvidéo

…

Votreordinateurnepeutexécutercesapplicationsinformatiquesquesiellessontécrites dansleseullangagequ’ilcomprend,lebinaire.

Techniquement,lebinaireestreprésentéparunesuitede0etde1.

Techniquement,lebinaireestreprésentéparunesuitede0etde1.

Iln’estbiensûrpasraisonnablementpossiblederéaliserunegrosseapplicationenbinaire,

c’estpourçaqu’ilexistedeslangagesdeprogrammationquipermettentdesimplifier

l’écritured’uneapplicationinformatique.

Commentcréerdesprogrammes“simplement”?

Jevaisvousexpliquerrapidementleprincipedefonctionnementdeslangages

“traditionnels”commeleCetleC++,puisjevousprésenterailefonctionnementduC#.

CommeleC#estplusrécent,ilaétépossibled’améliorersonfonctionnementparrapport

auCetauC++commenousallonslevoir.

Langagestraditionnels:lacompilation

AvecdeslangagestraditionnelscommeleCetleC++,onécritdesinstructions

simplifiées,lisiblesparunhumaincomme:

printf("Bonjour");

Cen’estpasvraimentdufrançais,maisc’estquandmêmebeaucoupplussimplequele

binaireetoncomprendglobalementaveccetexemplequel’onvaafficherlemotBonjour.

Bienentendu,l’ordinateurnecomprendpascesinstructions.Lui,ilveutdubinaire,du

vrai.

Pourobtenirdubinaireàpartird’uncodeécritenCouC++,ondoiteffectuercequ’on

appelleunecompilation.Lecompilateurestunprogrammequitraduitlecodesourceen

binaireexécutable:

appelleune compilation .Lecompilateurestunprogrammequitraduitlecodesourceen binaireexécutable:
Cetteméthodeestefficaceetafaitsespreuves.Denombreusespersonnesdéveloppent

Cetteméthodeestefficaceetafaitsespreuves.Denombreusespersonnesdéveloppent

toujoursenCetC++aujourd’hui.Néanmoins,ceslangagesontaussiuncertainnombre

dedéfautsdusàleurancienneté.Parexemple,unprogrammecompilé(binaire)ne

fonctionnequesurlaplateformepourlaquelleilaétécompilé.Celaveutdirequesivous

compilezsousWindows,vousobtenezunprogrammequifonctionnesousWindows

uniquement(etsuruntypedeprocesseurparticulier).Impossibledelefairetournersous

MacOSXouLinuxsimplement,àmoinsdelerecompilersouscessystèmes

d’exploitation(etd’effectueraupassagequelquesmodifications).

Lesprogrammesbinairesontcedéfaut:ilsnefonctionnentquepouruntypedemachine.

Pourlesdéveloppeursquiécriventlecode,c’estassezfastidieuxàgérer.

Langagesrécents:lecodemanagé

Leslangagesrécents,commeleC#etleJava,résolventceproblèmedecompatibilitétout

enajoutantdenombreusesfonctionnalitésappréciablesaulangage,cequipermetde

réaliserdesprogrammesbeaucoupplusefficacement.

LacompilationenC#nedonnepasunprogrammebinaire,contrairementauCetauC++.

LecodeC#estenfaittransformédansunlangageintermédiaire(appeléCILouMSIL)

quel’onpeutensuitedistribueràtoutlemonde.Cecode,biensûr,n’estpasexécutable

lui-même,carl’ordinateurnecomprendquelebinaire.

Regardezbienceschémapourcomprendrecommentcelafonctionne:

Regardezbienceschémapourcomprendrecommentcelafonctionne:

Lecodeenlangageintermédiaire(CIL)correspondauprogrammequevousallez

distribuer.SousWindows,ilprendl’apparenced’un.execommelesprogrammes

habituels,maisilnecontientenrevanchepasdebinaire.

Lorsqu’onexécuteleprogrammeCIL,celui-ciestluparunautreprogramme(une

machineàanalyserlesprogrammes,appeléeCLR)quilecompilecettefoisenvrai

programmebinaire.Cettefois,leprogrammepeuts’exécuter,ouf!

Cacompliquebienleschosesquandmême!Est-cebienutile?programmebinaire.Cettefois,leprogrammepeuts’exécuter,ouf!

Celaoffrebeaucoupdesouplesseaudéveloppeur.Lecodeenlangageintermédiaire(CIL)

peutêtredistribuéàtoutlemonde.Ilsuffitd’avoirinstallélamachineCLRsurson

ordinateur,quipeutalorslirelesprogrammesenC#etlescompiler“àlavolée”en

binaire.Avantage:leprogrammeesttoujoursadaptéàl’ordinateursurlequeliltourne.

LaCLRvérifieaussilasécuritéducode;ainsienCducodemalpensé(par

exempleunemauvaiseutilisationdespointeurs)peutentraînerdesproblèmes

pourvotrePC,cequevousrisquezbeaucoupmoinsavecleC#.Deplus,laCLR

disposeduJITdebuggerquipermetdelancerVisualStudiosiuneerreur

survientdansunprogramme.NETpourvoircequiacausécetteerreur.On

parledecodemanagé.

Cettecomplexitéralentitlégèrementlavitessed’exécutiondesprogrammes(parrapport

auCouauC++),maisladifférenceestaujourd’huivraimentnégligeableparrapportaux

gainsquecelaapporte.

Donc,enthéorie,ilestpossibled’utilisern’importequelleapplicationcompiléeen

langageintermédiaireàpartirdumomentoùilyauneimplémentationduCLR

disponible.

Enréalité,iln’yaquesousWindowsqu’ilexisteuneimplémentationcomplèteduCLR.

IlexistecependantuneimplémentationpartiellesousLinux:Mono.Celaveutdirequesi

votreprogrammeutilisedesfonctionnalitésquinesontpascouvertesparMono,ilne

fonctionnerapas.

fonctionnerapas. Enconclusion,danslapratique,le.NETesttotalementexploitablesous Windows,ailleursnon.

Enconclusion,danslapratique,le.NETesttotalementexploitablesous

Windows,ailleursnon.

Exécutablesouassemblages?

J’aiditjusteaudessusqueleC#étaitcompiléenlangageintermédiaireetqu’onle

retrouvesouslaformed’un.execommelesprogrammeshabituels.

C’estvrai!(Jenemensjamais).retrouvesouslaformed’un.execommelesprogrammeshabituels. Parcontre,c’estunpeuincomplet.

Parcontre,c’estunpeuincomplet.

Ilestpossibledecréerdesprogrammes(.exe)quipourrontdirectementêtreexécutéparle

CLR,maisilestégalementpossibledecréerdesbibliothèquessouslaformed’unfichier

possédantl’extension«.dll».

Onappellecesdeuxformesdeprogrammesdesassemblages,maisonutiliseglobalement

toujourslemotanglais«assembly».

Lesfichiers.exesontdesassemblysdeprocessus

Lesfichiers.dllsontdesassemblysdebibliothèques

Concrètement,celasignifiequelefichier.exeserviraàlanceruneapplicationetqu’une

dllpourraêtrepartagéeentreplusieursapplications.exeafinderéutiliserducodedéjà

écrit.

Nousverronsunpeuplusloincommentceciestpossible.

écrit. Nousverronsunpeuplusloincommentceciestpossible.

Ilestànoterqu’unraccourciestsouventfaitavecletermeassembly.Ona

tendanceàvoirquelemotassemblysertàdésigneruniquementles

bibliothèquesdontl’extensionest.dll.

Qu’est-cequeleframework.NET?

J’aicommencéàvousparlerduC#quiétaitunebriqueduframework.NET.Ilesttemps

d’ensavoirunpeuplussurcefameuxframework.

Commençonsparlecommencement:commentcelaseprononce?

Citation:Shakespeare

DOTTENETTE

Citation:maitreCapello

POINTNETTE

Jevousaccordequelenomestbizarre,pointtropnetpourrions-nousdire…

Surtoutquelenompeutêtretrompeur.Avecl’omniprésenced’internet,sonabréviation

(net)ouencoredesnomsdedomaines(.net),onpourraitpenserqueleframework.NET

estuntrucdédiéàinternet.Quenenni.

Nousallonsdoncpréciserunpeucequ’estleframework.NETpouréviterlesambigüités.

Premièrechoseàsavoir,qu’est-cequ’unframework?

Poursimplifier,onpeutdirequ’unframeworkestuneespècedegrosseboiteà

fonctionnalitésquivanouspermettrederéaliserdesapplicationsinformatiquesdetoutes

sortes.

sortes.

Enfait,c’estlacombinaisondeceframeworketdulangagedeprogrammation

C#quivanouspermettrederéalisercesapplicationsinformatiques.

Leframework.NETestunframeworkcrééparMicrosoften2002,enmêmetempsquele

C#,quiestprincipalementdédiéàlaréalisationd’applicationsfonctionnantdansdes environnementsMicrosoft.Nouspourronsparexempleréaliserdesprogrammesqui fonctionnentsousWindows,oubiendessiteswebouencoredesapplicationsqui fonctionnentsurtéléphonemobile,etc. Disonsquelaréalisationd’uneapplicationinformatique,c’estunpeucommeunchantier (jedispasçaparcequec’esttoujoursenretard,mêmesic’estvrai ).Ilestpossiblede construiredifférenteschoses,commeunemaison,unepiscine,uneterrasse,etc.Pour réalisercesconstructions,nousallonsavoirbesoindematériaux,commedesbriques,dela ferraille,etc.Certainsmatériauxsontcommunsàtouteslesconstructions(fer,vis,…)et d’autressontspécifiquesàcertainsdomaines(pourconstruireunepiscine,jevaisavoir besoind’unlinerparexemple). Onpeutvoirleframework.NETcommecesmatériaux,c’estunensembledecomposants quel’ondevraassemblerpourréalisernotreapplication.Certainssontspécifiquespourla réalisationd’applicationsweb,d’autrespourlaréalisationd’applicationsWindows,etc. Pourréaliserunchantier,nousallonsavoirbesoind’outilspourmanipulerlesmatériaux. Quienvisageraitdevisserunevisaveclesdoigtsoudeposerdesparpaingssanslescoller avecdumortier?C’estlamêmechosepouruneapplicationinformatique,pourassembler notreapplication,nousallonsutiliserunlangagedeprogrammation:leC#.

Al’heureoùj’écrisceslignes,leC#estenversion4ainsiqueleframework.NET.Ce

sontdesversionsstablesetutiliséesparbeaucoupdepersonnes.Chaqueversion

intermédiaireaapportésonlotd’évolutions.Leframework.NETetleC#sonten

perpétuelleévolutionpreuvedeladynamiqueapportéeparMicrosoft.

C’esttoutcequ’ilyaàsavoirpourl’instant,nousreviendronsunpeuplusendétailsurle

framework.NETdansleschapitressuivants.Pourl’heure,ilestimportantderetenirque

c’estgrâceaulangagedeprogrammationC#etgrâceauxcomposantsduframework.NET

quenousallonspouvoirdévelopperdesapplicationsinformatiques.

Enrésumé

LeC#estunlangagedeprogrammationpermettantd’utiliserleframework.NET.

C’estlelangagepharedeMicrosoft.

Leframework.NETestuneénormeboîteàfonctionnalitéspermettantlacréation

d’applications.

LeC#permetdedévelopperdesapplicationsdetoutessortes,exécutablesparleCLR

quitraduitleMSILenbinaire.

Ilestpossibledecréerdesassemblysdedeuxsortes:desassemblysdeprocessus

exécutablesparleCLRetdesassemblysdebibliothèques.

Chapitre2

CréerunprojetavecVisualC#2010express

CréerunprojetavecVisualC#2010express DanscechapitrenousallonsfairenospremierspasavecleC#.Nousallonsdansun

DanscechapitrenousallonsfairenospremierspasavecleC#.Nousallonsdansun

premiertempsinstalleretdécouvrirlesoutilsquinousserontnécessairespourréaliserdes

applicationsinformatiquesavecleC#.Nousverronscommentdémarreraveccesoutilset

àlafindecechapitre,nousseronscapablesdecréerunpetitprogrammequiaffichedu

textesimpleetnousauronscommencéànousfamiliariseravecl’environnementde

développement.

Ilfautbiencommencerparlesbases,maisvousverrezcommecelapeutêtregratifiant

d’arriverenfinàfaireunpetitquelquechose.Allez,c’estparti!

Quefaut-ilpourdémarrer?

J’espèrevousavoirdonnéenviededémarrerl’apprentissageduC#,cependant,ilnous

manqueencorequelquechosepourpouvoirsereinementattaquercetapprentissage.

Biensûr,vousallezavoirbesoind’unordinateur,maisapriori,vousl’avezdéjà…S’il

n’estpassousWindows,maissouslinux,vouspouvezutiliserMonoquivapermettre

d’utiliserleC#souslinux.Cependant,Monon’estpasaussicompletqueleC#etle

framework.NETsousWindows,enl’utilisantvousrisquezdepasseràcôtédecertaines

partiesdututoriel.

Pourreprendrelamétaphoreduchantier,onpeutdirequ’ilvaégalementnousmanquerun

chefdechantier.Iln’estpasforcémentnécessaireenthéorie,maisdanslapratiqueilse

révèleindispensablepourmeneràbiensonchantier.

Cechefdechantierc’estenfaitl’outildedéveloppement.Ilvanousfournirlesoutils

pourorchestrernosdéveloppements.

C’estentreautres:

Unpuissantéditeurpourorchestrernosdéveloppements. C’estentreautres: Uncompilateur Unenvironnementd’exécution

UncompilateurC’estentreautres: Unpuissantéditeur Unenvironnementd’exécution L’éditeurdetexte

Unenvironnementd’exécution

L’éditeurdetextevanousserviràcréerdesfichierscontenantdesinstructionsenlangage

C#.

Lecompilateurvaserviràtransformercesfichiersenunesuited’instructions

compréhensiblesparl’ordinateur,commenousl’avonsdéjàvu.

Lemoteurd’exécutionvapermettredefairelesactionsinformatiquescorrespondantes

(afficherunephrase,réagirauclicdelasouris,etc.),c’estleCLRdontonadéjàparlé.

Enfin,nousauronsbesoind’unebasededonnées.Nousyreviendronsplusendétail

ultérieurement,maislabasededonnéesestunendroitoùserontstockéeslesdonnéesde

notreapplication.C’estunélémentindispensableàmesurequel’applicationgrandit.

InstallerVisualC#2010express

Nousavonsdoncbesoindenotrechefdechantier,l’outildedéveloppement.C’estun

logicielquivanouspermettredecréerdesapplicationsetquivanousfournirlesoutils

pourorchestrernosdéveloppements.LagammedeMicrosoftestricheenoutils

professionnelsdequalitépourledéveloppement,notammentgrâceàVisualStudio.

VisualStudio . NotezquecetoutildedéveloppementsenommeégalementunIDEpour«

NotezquecetoutildedéveloppementsenommeégalementunIDEpour«

IntegratedDevelopmentEnvironment»cequisignifie«Environnementde

développementintégré».

NousauronsrecoursautermeIDErégulièrement. Pourapprendreetcommenceràdécouvrirl’environnementdedéveloppement,Microsoft proposegratuitementVisualStudiodanssaversionexpress.C’estuneversionallégéede l’environnementdedéveloppementquipermetdefairepleindechoses,maisavecdes outilsenmoinsparrapportauxversionspayantes.Rassurez-vous,cesversionsgratuites sonttrèsfourniesetpermettentdefairetoutcedontonabesoinpourapprendreleC#et suivrecetutoriel. Pourréaliserdesapplicationsd’envergure,ilpourracependantêtrejudicieuxd’investir dansl’outilcompletetainsibénéficierdefonctionnalitéscomplémentairesquipermettent d’améliorer,defaciliteretd’industrialiserlesdéveloppements. PourdévelopperenC#gratuitementetcréerdesapplicationsWindows,nousallonsavoir

besoindeMicrosoftVisualC#2010Expressquevouspouveztéléchargerenvous

rendantsurcettepage.

Pourrésumer:

VisualStudioestlaversionpayantedel’outildedéveloppement.

MicrosoftVisualC#2010ExpressestuneversionallégéeetgratuitedeVisual

Studio,dédiéeaudéveloppementenC#.Exactementcequ’ilnousfaut

CliquezsurVisualC#2010Expressetchoisissezlalanguequivousconvient.Puiscliquez

surTéléchargez.

Unefoisl’exécutabletéléchargé,ilneresteplusqu’àlelanceretl’installationdémarre: Cliquezsur Suivant
Unefoisl’exécutabletéléchargé,ilneresteplusqu’àlelanceretl’installationdémarre: Cliquezsur Suivant

Unefoisl’exécutabletéléchargé,ilneresteplusqu’àlelanceretl’installationdémarre:

Cliquezsur Suivant pourdémarrerl’installation:

CliquezsurSuivantpourdémarrerl’installation:

Cliquezsur Suivant pourdémarrerl’installation:

Vousdevezàprésentlirelalicenced’utilisationdulogicieletl’accepterpourpouvoir

continuerl’installation:

Vousdevezàprésentlirelalicenced’utilisationdulogicieletl’accepterpourpouvoir continuerl’installation:

Uneapplicationsansdonnées,c’estplutôtrare.C’estunpeucommeunsited’e-commerce sansproduits,untraitementdetextesansfichiersoulesiteduzérosanstutoriel.Onrisque devites’ennuyer . Heureusement,leprogrammed’installationnousproposed’installer«MicrosoftSQL

Server2008expressServicePack1».

Microsoftproposeenversiongratuiteunserveurdebasededonnéesallégé.Ilvanous

permettredecréerfacilementunebasededonnéesetdel’utiliserdepuisnosapplications

enC#.

enC#.
enC#.

Nousl’avonsdéjàévoquéetnousyreviendronsplusendétaildansunchapitre

ultérieurmaisunebasededonnéesestunénormeendroitoùsontstockéesles

donnéesdenotreapplication.

Nousavonségalementévoquédansl’introductionqu’ilétaitpossiblederéaliserdes

applicationsquiressemblentàdesapplicationsWindowsmaisdansunnavigateur,que

nousavonsappelé«clientsriches».Silverlightvajustementpermettredecréercegenre

d’application.

CochezdonctoutpourinstallerSilverlightetSqlServeretcliquezsursuivant:

Cliquezsur Installer

CliquezsurInstallerenchangeantéventuellementledossierd’installation:

enchangeantéventuellementledossierd’installation: L’installationdémarre(vousdevezêtreconnectéàInternet):

L’installationdémarre(vousdevezêtreconnectéàInternet):

Unefoisl’installationterminéecliquezsur Quitter .

Unefoisl’installationterminéecliquezsurQuitter.

Unefoisl’installationterminéecliquezsur Quitter .

Al’heureoùj’écrisceslignes,ilexisteunservicepackpourvisualstudio,leservicepack

1.C’estunensembledecorrectionsquipermettentd’améliorerlastabilitédulogiciel.

Jevousinviteàtéléchargeretinstallerceservicepack.

VousvoilàavecvotrecopiedeVisualC#expressquivavouspermettredecréerdes

programmesenC#gratuitementetfacilement.L’installationdel’outildedéveloppement

estterminée.

estterminée.

Notezque,bienquegratuite,vousaurezbesoind’enregistrervotrecopiede

VisualC#expressavant30jours.C’estuneopérationrapideetnécessitantun

compteWindowsLive.Aprèscela,vouspourrezutiliserVisualC#expresssans

retenues.

Enrésumé,nousavonsinstalléunoutildedéveloppement,VisualC#2010danssaversion

expressetunebasededonnées,SQLServerexpress2008.

Nousavonstouslesoutilsnécessairesetnousallonspouvoirdémarrer(enfin!)

l’apprentissageetlapratiqueduC#.

DémarrerVisualC#2010Express

Nousallonsvérifierquel’installationdeVisualC#expressabienfonctionné.Etpource

faire,nousallonsledémarreretcommenceràprendreenmainceformidableoutilde développement. Ilvoussemblerasurementtrèscomplexeaudébutmaisvousallezvoir,sivoussuivezce tutorielpasàpas,vousallezapprendrelesfonctionnalitésindispensables.Ellesseront illustréespardescopiesd’écransvouspermettantdeplusfacilementvousyretrouver.A forced’utiliserVisualC#express,vousverrezquevousvoussentirezdeplusenplusà l’aiseetpeut-êtreoserez-vousallerfouillerdanslesmenus?

CommencezpardémarrerVisualC#2010Express.Lelogiciels’ouvresurlapagede

démarragedeVisualC#2010Express:

démarragedeVisualC#2010Express:

Lesdeuxzonesentouréesderougepermettentrespectivementdecréerunnouveauprojet

etd’accéderauxanciensprojetsdéjàcréés.Danscedeuxièmecas,commejeviens

d’installerlelogiciel,lalisteestvide.

Créerunprojet

Commençonsparcréerunnouveauprojetencliquantdanslazonerouge.Cette

commandeestégalementaccessiblevialemenuFichier>Nouveau>Projet

Unprojetvacontenirlesélémentsdecequel’onsouhaiteréaliser.Celapeutêtrepar

exempleuneapplicationweb,uneapplicationWindows,etc…

Leprojetestaussiuncontainerdefichiersetnotammentdansnotrecasdefichiersen

langageC#quivontpermettredeconstruirecequel’onsouhaiteréaliser.Leprojetesten

faitreprésentéparunfichierdontl’extensionest.csproj.Soncontenudécritlesparamètres

deconfigurationcorrespondantàcequel’onsouhaiteréaliseretlesfichiersquicomposent

leprojet.

Créonsdoncunnouveauprojet.Lafenêtredecréationdenouveauprojets’ouvreetnous

avonsplusieurspossibilitésdechoix.Nousallonsdansunpremiertempsallerdans

Visual C#pourchoisirdecréeruneApplication console.

Ànoterquesivousn’avezinstalléqueVisualC#express,vousaurezlamême
Ànoterquesivousn’avezinstalléqueVisualC#express,vousaurezlamême

Ànoterquesivousn’avezinstalléqueVisualC#express,vousaurezlamême

fenêtrequemoi.SivousdisposezdelaversionpayantedeVisualStudio,alors

lafenêtreserasurementplusgarnie.Demême,ilyauraplusdechosessivous

avezinstalléd’autresoutilsdelagammeExpress.

Cequenousfaisonsici,c’estutilisercequ’onappelleun«modèle»(pluscouramment appeléparsonéquivalentanglais:«template»)decréationdeprojet. Sivousnaviguezàl’intérieurdesdifférentsmodèles,vouspourrezconstaterqueVisual C#nousproposedesmodèlesdeprojetsplusoumoinscompliqués.Cesmodèlessonttrès utilespourdémarrerunprojetcartoutelaconfigurationduprojetestdéjàfaite.Lenombre demodèlespeutêtredifférentenfonctiondevotreversiondeVisualStudiooudunombre deversionsexpressinstallées. L’applicationConsoleestlaformedeprojetpouvantproduireuneapplicationexécutable laplussimple.Ellepermetderéaliserunprogrammequivas’exécuterdanslaconsole noirequiressembleàunefenêtrems-dos,pourlesdinosaurescommemoiquiontconnu cetteépoque…Anoterquelesprojetsdetype«Bibliothèquedeclasses»permettentde générerdesassemblysdebibliothèques(.dll). Danscetteconsole,nousallonspouvoirnotammentafficherdutextesimple. Cetypedeprojetestparfaitpourdémarrerl’apprentissageduC#cariln’yabesoinquede savoircommentafficherdutextepourcommenceralorsquepourréaliseruneapplication graphiqueparexemple,ilyabeaucoupd’autreschosesàsavoir. Enbasdelafenêtredecréationdeprojet,nousavonslapossibilitédechoisirunnompour

leprojet,iciConsoleApplication1.Changeonslenomdenotreapplication,parexemple

“MaPremiereApplication”,danslazonecorrespondante.

CliquonssurOKpourvaliderlacréationdenotreprojet.

VisualC#Expresscréealorspournouslesfichierscomposantuneapplicationconsole

vide,quiutiliseleC#commelangageetquenousavonsnomméMaPremiereApplication.

Avanttoutechose,nousallonsenregistrerleprojet.AllonsdanslemenuFichier>

Enregistrer(ouutiliserleraccourcibienconnuctrl+s):

> Enregistrer (ouutiliserleraccourcibienconnuctrl+s):

VisualC#Expressnousouvrelafenêtred’enregistrementdeprojet:

Nouspouvonsdonnerunnom,préciserunemplacementoùnoussouhaitonsqueles

fichierssoientenregistrésetunnomdesolution.Unecaseàcocherpré-cochéenous

proposedecréerunrépertoirepourlasolution.C’estcequenousallonsfaireetcliquons

surEnregistrer.

sur Enregistrer . ÀnoterquepourlesversionspayantesdeVisualStudio,lechoixde

ÀnoterquepourlesversionspayantesdeVisualStudio,lechoixde

l’emplacementetlenomdelasolutionsontàrenseigneraumomentoùl’on

créeleprojet.Unedifférencesubtile

Analyserapidedel’environnementdedéveloppementet

ducodegénéré

Allonsdansl’emplacementrenseigné(ici

c:\users\nico\documents\visual studio 2010\Projects),nouspouvonsconstaterque

VisualC#ExpressacrééunrépertoireMaPremiereApplication,c’estlefameuxrépertoire

pourlasolutionqu’ilnousaproposédecréer.

Danscerépertoire,nousremarquonsnotammentunfichierMaPremiereApplication.sln.

C’estcequ’onappellelefichierdesolution;ils’agitjusted’uncontainerdeprojetsqui

vanouspermettredevisualisernosprojetsdansvisualC#express.

Enl’occurrence,pourl’instant,nousavonsunseulprojetdanslasolution:l’application

MaPremiereApplication,quenousretrouvonsdanslesousrépertoire

MaPremiereApplicationetquicontientnotammentlefichierdeprojet:

MaPremiereApplication.csproj.

LefichierdécrivantunprojetécritenC#estpréfixéparcs(csproj).MaPremiereApplication.csproj .

Ilyaencoreunfichierdigned’intérêt(pourl’instant)danscerépertoire,ils’agitdu

fichierProgram.cs.Lesfichiersdontl’extensionest.cscontiennentducodeC#,c’estdans

cefichierquenousallonscommenceràtapernospremièreslignesdecode…

Ànoterquel’ensembledesfichierscontenantdesinstructionsécritesdansun

langagedeprogrammationestappeléle«codesource».Parextension,le«

code»correspondàdesinstructionsécritesdansunlangagedeprogrammation.

Sinousretournonsdansl’interfacedeVisualC#express,nouspouvonsretrouverquelque

chosecommeça:

chosecommeça:

Lazonevertenuméro1contientlesdifférentsfichiersouvertssouslaformed’unonglet.

Onvoitquepardéfaut,VisualC#nousacrééetouvertlefichierProgram.cs.

Danslazonerougenuméro2,c’estl’éditeurdecode.Ilaffichelecontenudufichier

ouvert.Nousvoyonsdesmotsquenousnecomprenonspasencore.C’estducodequia

étéautomatiquementgénéréparVisualC#.Nouspouvonsobserverquelesmotssontde

différentescouleurs.Eneffet,l’éditeurVisualC#expresspossèdecequ’onappelleune colorationsyntaxique,c’est-à-direquecertainsmotscléssontcolorésd’unecouleur différenteenfonctiondeleursignificationoudeleurcontexteafindenouspermettrede nousyretrouverplusfacilement.

Lazonenuméro3envioletestl’explorateurdesolutions,c’esticiquel’onvoitlecontenu

delasolutionsurlaquellenoustravaillonsencemoment.Enl’occurrence,ils’agitdela

solution«MaPremiereApplication»quicontientununiqueprojet«

MaPremiereApplication».Ceprojetcontientplusieurssouséléments:

Properties:contientdespropriétésdel’application,onnes’enoccupepaspour

l’instant

Références:contientlesréférencesdel’application,onnes’enoccupepaspour

l’instant

Program.csestlefichierquiaétégénéréparVisualC#etquicontientlecodeC#.Il

nousintéressefortement!!

Lazone4enbrunestlazonecontenantlespropriétésdecesurquoinoustravaillonsence

moment.Ici,nousavonslecurseurpositionnésurleprojet,iln’yapasbeaucoup d’informationsexceptélenomdufichierdeprojet.Nousauronsl’occasionderevenirsur cettefenêtreplustard.

Lazone5enjaunen’estpasaffichéeaupremierlancement,ellecontientlalistedes

erreurs,desavertissementsetdesmessagesdenotreapplication.Nousverronscomment l’afficherunpeuplusbas.

Lazone6ennoirestlabarred’outils,ellepossèdeplusieursboutonsquenouspourrons

utiliser,notammentpourexécuternotreapplication.

Ecriredutextedansnotreapplication

Allonsdoncdanslazone2réservéeàl’éditiondenotrefichierProgram.csquiestle

fichiercontenantlecodeC#denotreapplication.

Lesmotsprésentsdanscettezonesontcequ’onappelledesinstructionsdelangage.Elles

vontnouspermettred’écrirenotreprogramme.

Nousreviendronsplusloinsurcequeveulentdirelesinstructionsquiontétégénéréespar

VisualC#,pourl’instant,rajoutonssimplementl’instructionsuivanteaprèsl’accolade

ouvrante:

Console.WriteLine("Hello World !!");

demanièreàavoir:

static void Main(string[] args)

{

Console.WriteLine("Hello World !!");

}

Nousvenonsd’écrireuneinstructionquivaafficherlaphrase“HelloWorld!!”,pour

l’instantvousavezjustebesoindesavoirça.Nousétudieronsplusendétailultérieurement

àquoicelacorrespondexactement.

L’exécutionduprojet

L’exécutionduprojet Cayest!Nousavonsécritnotrepremiercodequiafficheunmessagetrès

Cayest!Nousavonsécritnotrepremiercodequiafficheunmessagetrès

populaire.Maispourlemoment,çanefaitrien.Onveutvoircequeçadonne

!!!

Commejevouscomprends.

LapremièrechoseàfaireestdetransformerlelangageC#quenousvenonsd’écrireen

programmeexécutable.Cettephases’appellela«générationdelasolution»sousVisual

C#.Onl’appellesouventla«compilation»ouenanglaisle«build».

AllezdanslemenuDébogueretcliquezsur«Générerlasolution»:

AllezdanslemenuDébogueretcliquezsur«Générerlasolution»:

VisualC#lancealorslagénérationdelasolutionetonvoitdanslabarredestachesenbas

àgauchequ’iltravaillejusqu’ànousindiquerquelagénérationaréussi:

Sinousallonsdanslerépertoirecontenantlasolution,nouspouvonsvoirdansle

répertoireMaPremiereApplication\MaPremiereApplication\bin\Releasequ’ilyadeux

fichiers:

MaPremiereApplication.exe MaPremiereApplication.pdb

MaPremiereApplication.exe

MaPremiereApplication.pdb

Lepremierestlefichierexécutable,possédantl’extension.exe,quiestlerésultatdu

processusdegénération.Ils’agitbiendenotreapplication.

Lesecondestunfichierparticulierqu’iln’estpasutiledeconnaitrepourl’instant,nous

allonsl’ignorer.

Exécutonsnotreapplicationenlançantlefichierexécutabledepuisl’explorateurde

fichiers.Déception,nousvoyonsàpeineuntrucnoirâtrequis’afficheetquisereferme

immédiatement.Ques’est-ilpassé?

Enfait,l’applications’estlancée,aaffichénotremessageets’estterminée

immédiatement.Ettoutçaunbrintroprapidement…çanevapasêtrepratiquetoutça.

Heureusement,VisualC#expressarriveàlarescousse.RetournonsdansnotreIDE

préféré.Nousallonsajouterunboutondanslabarred’outils.J’avouenepascomprendre

pourquoiceboutonestmanquantdansl’installationpardéfaut.Nousallonsremédieràce

problèmeencliquantsurlapetiteflèchequiestàcôtédelabarred’outilstoutàdroiteet

quinousouvrelemenudéroulantpermettantd’ajouterousupprimerdesboutonset

cliquezsur«Personnaliser»:

Cliquezsur«Ajouterunecommande»:

Cliquezsur«Ajouterunecommande»:

Allezdanslacatégorie«déboguer»etchoisissez«Exécutersansdébogage»puiscliquez sur«OK»:

Allezdanslacatégorie«déboguer»etchoisissez«Exécutersansdébogage»puiscliquez

sur«OK»:

sur«OK»:

Enfin,fermezlafenêtre.Vousavezdésormaisunnouveauboutondanslabarred’outils:

Sivousavezeulaflemmed’ajouterleboutonprécédemment,vouspouvezutiliserle

Sivousavezeulaflemmed’ajouterleboutonprécédemment,vouspouvezutiliserle

raccourcictrl+F5oubiencliquersurcenouveauboutonpourexécuterl’applicationdepuis

Visualc#.Laconsoles’ouvrenousdélivrantlemessagetantattendu:

LemessageestdésormaisvisiblecarVisualC#nousdemanded’appuyersurunetouche

pourquel’applicationsetermine,cequinouslaissedoncletempsd’apprécierl’exécution

denotresuperbeprogramme.

Wahouu,çayest,notrepremièreapplicationenC#!!!

Jesuisfierdenous,maisnousn’allonspasenresterlà,noussommesdésormaisfinparés

pourapprendreleC#.

Enrésumé

VisualC#Expressestl’outildedéveloppementgratuitdeMicrosoftpermettantde

démarreravecleC#.

VisualStudioestl’outildedéveloppementpayantdeMicrosoftpermettantd’être

efficacedansledéveloppementd’applications.NET.

MicrosoftSQLServerExpressestlemoteurdebasededonnéesutilisablefacilement

avecVisualC#Express.

L’environnementdedéveloppementnouspermetdecréerducodeC#quisera

contenudansdesprojets,quipeuventêtreréunisdansunesolution.

Chapitre3

LasyntaxegénéraleduC#

LasyntaxegénéraleduC# NousallonsabordericilasyntaxegénéraledulangagedeprogrammationC#danslecadre

NousallonsabordericilasyntaxegénéraledulangagedeprogrammationC#danslecadre

d’uneapplicationconsole.Ilesteneffetpossibledecréerpleindechosesdifférentesavec

leC#commeuneapplicationweb,desjeux,etc.

Danscetteoptique,nousallonsutilisertrèssouventl’instruction:

Console.WriteLine(“…”);quenousavonsvueauchapitreprécédentetquiestune

instructiondédiéeàl’affichagesurlaconsole.C’estuneinstructionquivas’avérertrès

pratiquepournotreapprentissagecarnouspourronsavoirunereprésentationvisuellede

cequenousallonsapprendre.

Ilestglobalementrarequ’uneapplicationnedoiveafficherquedutexte,sansaucunemise

enforme.Vousverrezenfindetutorielcommentréaliserdesapplicationsunpeuplus

évoluéesgraphiquement.

Préparezvous,nousplongeonspetitàpetitdansl’universduC#.Danscechapitre,nous

allonsnousattaqueràlasyntaxegénéraleduC#etnousseronscapabledereconnaîtreles

lignesdecodeetdequoiellessecomposent.

Ecrireunelignedecode

LeslignesdecodeécritesaveclelangagededéveloppementC#doivents’écriredansdes

fichiersdontl’extensionest.cs.Nousavonsvudanslechapitreprécédentquenousavons

écritdanslefichierProgram.csquiestlefichierquiaétégénéréparVisualC#lorsdela

créationduprojet.Nousyavonsnotammentrajoutéuneinstructionpermettantd’afficher

dutexte.

LeslignesdecodeC#selisentets’écriventdehautenbasetdegaucheàdroite,comme

unlivrenormal.

Aussi,uneinstructionécriteavantuneautreseraengénéralexécutéeavantcelle-ci.

Attention,chaquelignedecodedoitêtrecorrectesyntaxiquementsinonle

compilateurnesaurapasletraduireenlangageexécutable.

Parexemple,siàlafindemoninstruction,jeretirelepoint-virguleousij’orthographie

mallemotWriteLine,j’aurai:

VisualC#Expressmesignalequ’ilyaunproblèmeenmettantenvaleurunmanqueau

VisualC#Expressmesignalequ’ilyaunproblèmeenmettantenvaleurunmanqueau niveaudelafindel’instructionetilmesouligneégalementlemot«WritLine». Danslafenêtredubas,ilm’indiquequ’iladeuxerreursetmedonnedesprécisionssur celles-ciavecéventuellementdespistespourrésoudreceserreurs.

Sijetentedelancermonapplication(raccourcictrl+F5),VisualC#Expressvatenterde

compileretd’exécuterl’application.Cecin’étantpaspossible,ilm’afficheraunmessage

indiquantqu’ilyadeserreurs.

indiquantqu’ilyadeserreurs.

Cesontdeserreursdecompilationqu’ilvafalloirrésoudresil’onsouhaiteque

l’applicationconsolepuisses’exécuter.

Nousallonsvoirdansleschapitressuivantcommentécrirecorrectementdesinstructions

enC#.Maisilestimportantdenoteràl’heureactuellequeleC#estsensibleàlacasse,

cequiveutdirequelesmajusculescomptent!

Ainsilemot«WriteLine»etlemot«WriTEline»sontdeuxmotsbiendistinctset

peuventpotentiellementreprésenterdeuxinstructionsdifférentes.Ici,ledeuxièmemotest

incorrectcariln’existepas.

incorrectcariln’existepas.

Rappelez-vousbienquelacasseestdéterminantepourquel’applicationpuisse

compiler.

Lecaractèredeterminaisondeligne

Engénéral,uneinstructionencodeC#s’écritsuruneligneetsetermineparunpoint-

virgule.

Ainsi,l’instructionquenousavonsvueplushaut:

Console.WriteLine("Hello World !!");

setermineauniveaudupoint-virgule.

Ilauraitétépossiblederemplacerlecodeécrit:

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Hello World !!");

}

}

par:

class Program {static void Main(string[] args) {Console.WriteLine("Hello World !!");}}

ouencore:

class Program

{

static void Main(string[] args)

{

Console

.WriteLine("Hello World !!"

}

}

);

Engénéral,pourquelecodesoitlepluslisiblepossible,onécrituneinstructionparligne

etonindentelecodedefaçonàcequelesblocssoientlisibles.

tard.etonindentelecodedefaçonàcequelesblocssoientlisibles.

Unblocdecodeestdélimitépardesaccolades{et}.Nousyreviendronsplus

Indentersignifiequechaquelignedecodequifaitpartied’unmêmeblocde soitdesespacesquipermettentdefaireceretrait.

soitdesespacesquipermettentdefaireceretrait.

codecommenceaveclemêmeretraitsurl’éditeur.Cesontsoitdestabulations,

VisualC#expressnousaidepourfairecorrectementcetteindentationquandnousécrivons

ducode.Ilpeutégalementremettretoutelapageenformeaveclacombinaisondetouche

:ctrl+k+ctrl+d.

Décortiquonsàprésentcettelignedecode:

Console.WriteLine("Hello World !!");

Poursimplifier,nousdironsquenousappelonslaméthodeWriteLinequipermetd’écrire

unechainedecaractèressurlaConsole.

unechainedecaractèressurlaConsole.

Uneméthodereprésenteunefonctionnalité,écriteavecducode,quiest

utilisablepard’autresboutsdecode(parexemple,calculerlaracinecarréed’un

nombreouafficherdutexte…).

L’instruction“HelloWorld!!”représenteunechainedecaractèresetestpasséeen

paramètredelaméthodeConsole.WriteLineàl’aidedesparenthèses.Lachainede

caractèresestdélimitéeparlesguillemets.Enfin,lepoint-virgulepermetd’indiquerque

l’instructionestterminéeetqu’onpeutenchainersurlasuivante.

Certainspointsnesontpeut-êtrepasencoretoutàfaitclairs,commecequ’estvraiment

uneméthode,oucommentutiliserdeschainesdecaractères,maisnevousinquiétezpas,

nousallonsyrevenirplusendétaildansleschapitressuivantsetdécouvriraufuretà

mesurelesarcanesduC#.

Lescommentaires

Pourfaciliterlacompréhensionducodeoupourserappelerunpointprécis,ilestpossible demettredescommentairesdanssoncode.Lescommentairessontignorésparle compilateuretn’ontqu’unevaleurinformativepourledéveloppeur.

DansunfichierdecodeC#(.cs),onpeutécriredescommentairesde2façonsdifférentes:

Soitencommençantsoncommentairepar/*etenleterminantpar*/cequipermet

d’écrireuncommentairesurplusieurslignes.

Soitenutilisant//ettoutcequisetrouveaprèssurlamêmeligneestalorsun

commentaire.

VisualC#expresscolorelescommentairesenvertpourfaciliterleursidentifications.

/* permet d'afficher du texte sur la console */ Console.WriteLine("Hello World !!"); // ne pas oublier le point virgule

World !!" ); // ne pas oublier le point virgule

Anoterqu’onpeutcommenterplusieurslignesdecodeavecleraccourciclavier

ctrl+k+ctrl+cetdécommenterplusieurslignesdecodeavecleraccourci

clavierctrl+k+ctrl+u.

Lacomplétionautomatique

VisualC#expressestunformidableoutilquinousfaciliteàtoutmomentlatâche,

notammentgrâceàlacomplétionautomatique.

Lacomplétionautomatiqueestlefaitdeproposerdecompléterautomatiquementceque

noussommesentraind’écrireensebasantsurcequenousavonsledroitdefaire.

Parexemple,sivousavezcherchéàécrirel’instruction:

Console.WriteLine("Hello World !!");

vousavezpuconstaterquelorsdel’appuisurlatoucheC,VisualC#expressnousaffiche

unefenêtreavectoutcequicommencepar«C»:

unefenêtreavectoutcequicommencepar«C»:

Aufuretàmesuredelasaisie,ilaffinelespropositionspoursepositionnersurlaplus

pertinente.IlestpossibledevaliderlapropositionenappuyantsurlatoucheEntrée.Non

seulementcelanouséconomisedesappuisdetouches,paresseuxcommenoussommes,

maiscelanouspermetégalementdevérifierlasyntaxedecequenousécrivonset

d’obtenirégalementunemini-aidesurcequenousessayonsd’utiliser.

Ainsi,finieslesfautesdefrappequirésultentenuneerreurdecompilationouleslistesde

motsclésdontilfautabsolumentretenirl’écriture.

Delamêmefaçon,unefoisquevousavezfinidesaisir«Console»vousallezsaisirle

point«.»etVisualC#expressvanousproposertouteuneséried’instructionenrapport

avecledébutdel’instruction:

Nouspourronsainsifacilementfinirdesaisir«WriteLine»etcecisanserreurd’écriture, niproblèmedemajuscule. Enrésumé

Nouspourronsainsifacilementfinirdesaisir«WriteLine»etcecisanserreurd’écriture,

niproblèmedemajuscule.

Enrésumé

LecodeC#estcomposéd’unesuited’instructionsquiseterminentparunpoint

virgule.

Lasyntaxed’uncodeC#doitêtrecorrectesinonnousauronsdeserreursde

compilation.

Ilestpossibledecommentersoncodegrâceauxcaractères«//»,«/*»et«*/».

VisualC#Expressdisposed’unoutilpuissantquipermetd’aideràcompléterses

instructions:lacomplétionautomatique.

Chapitre4

Lesvariables

Lesvariables Danscechapitrenousallonsapprendrecequesontlesvariablesetcommentceséléments

Danscechapitrenousallonsapprendrecequesontlesvariablesetcommentceséléments

indispensablesvontnousrendrebiendesservicespourtraiterdel’informationsusceptible

dechangerdansnosprogrammesinformatiques.

Nouscontinueronsendécouvrantlesdifférentstypesdevariablesetnousferonsnos

premièresmanipulationsavecelles.

Soyezattentifsàcechapitre,ilestvraimentfondamentaldebiencomprendreàquoi

serventlesvariableslorsdudéveloppementd’uneapplicationinformatique.

Qu’est-cequ’unevariable?

Commetousleslangagesdeprogrammations,leC#vapouvoirconserverdesdonnées grâceàdesvariables.Cesontenfaitdesblocsdemémoirequivontcontenirdes nombres,deschainesdecaractères,desdatesoupleind’autreschoses. Lesvariablesvontnouspermettred’effectuerdescalculsmathématiques,d’enregistrer l’âgeduvisiteur,decomparerdesvaleurs,etc. Onpeutlescompareràdespetitsclasseurspossédantuneétiquette.Onvapouvoirmettre

deschosesdanscesclasseurs,parexemple,jemets30dansleclasseurétiqueté«âgede

Nicolas»et20dansleclasseur«âgedeJérémie».Sijeveuxconnaitrel’âgedeNicolas,

jen’aiqu’àregarderdansceclasseurpourobtenir30.Jepeuxégalementremplacerce

qu’ilyadansmonclasseurparautrechose,parexemplechanger30en25.Jenepeuxpar

contrepasmettredeuxchosesdansmonclasseur,iln’aqu’unseulemplacement.

Unevariableestreprésentéeparsonnom,caractériséeparsontypeetcontientune

valeur.

nom ,caractériséeparson type etcontientune valeur .

Letypecorrespondàcequelavariablereprésente:unentier,unechainede

caractères,unedate,etc…

Parexemple,l’âged’unepersonnepourraitêtrestockéesouslaformed’unentieret

accessibleparlavariable«age»,cequis’écritenC#:

int age;

Onappellececi«ladéclarationdelavariableage».

Lemotcléintpermetd’indiqueraucompilateurquelavariable«age»estunentier

numérique.intcorrespondaudébutd’«integer»quiveutdire«entier»enanglais.

Ici,lavariable«age»n’apasétéinitialisée,ellenepourrapasêtreutiliséecarle

compilateurnesaitpasquellevaleurilyadanslavariableage.

Pourl’initialiser(onparleégalement«d’affecterunevaleur»)onutiliseral’opérateur

égal(«=»).

int age; age = 30;

Notrevariable«age»possèdedésormaisl’entiernumérique«30»commevaleur.

L’initialisationd’unevariablepeutégalementsefaireaumêmemomentquesa

déclaration.Ainsi,onpourraremplacerlecodeprécédentpar:

int age = 30;

PourdéclarerunevariableenC#,oncommencetoujoursparindiquersontype(int,iciun

entier)etsonnom(age).Ilfaudraimpérativementaffecterunevaleuràcettevariableavec

l’opérateur«=»,soitsurlamêmeinstructionqueladéclaration,soitunpeuplusloindans

lecode,maisdanstouslescas,avantl’utilisationdecettevariable.

Nouspouvonsàtoutmomentdemanderlavaleurcontenuedanslavariableage,par

exemple:

int age = 30; Console.WriteLine(age); // affiche 30

Ilestpossibledemodifierlavaleurdelavariableàn’importequelmomentgrâceà

l’emploidel’opérateur=quenousavonsaperçu:

int age = 30; Console.WriteLine(age); // affiche 30 age = 20; Console.WriteLine(age); // affiche 20

Vouspouveznommervosvariablesàpeuprèsn’importecomment,àquelquesdétails

près.Lesnomsdevariablesnepeuventpasavoirlemêmenomqu’untype.Ilseraalors

impossibled’appelerunevariableint.Ilestégalementimpossibled’utiliserdescaractères

spéciaux,commedesespacesoudescaractèresdeponctuation.Demême,onnepourra

pasnommerunevariableencommençantpardeschiffres.

pasnommerunevariableencommençantpardeschiffres.

Ilestparcontrepossibled’utiliserdesaccentsdanslesnomsdevariable,

cependantcecin’estpasrecommandéetnefaitpaspartiedesbonnespratiques

dedéveloppement.Eneffet,ilestsouventrecommandédenommerses

variablesenanglais(languequinecontientpasd’accents).Vousaureznotéque

jenelefaispasvolontairementdanscetutorielafindenepasrajouterune

contraintesupplémentairelorsdelalectureducode.Maislibreàvousdele

faire.

Engénéral,unevariablecommenceparuneminusculeetsisonnomreprésenteplusieurs

mots,ondémarreraunnouveaumotparunemajuscule.Parexemple:

int ageDuVisiteur;

C’estcequ’onappellelecamelcase.

Attention,suivantleprincipedesensibilitéàlacasse,ilfautfaireattentioncar

ageduvisiteuretageDuVisiteurserontdeuxvariablesdifférentes:

int ageduvisiteur = 30; int ageDuVisiteur = 20;

Console.WriteLine(ageduvisiteur); // affiche 30 Console.WriteLine(ageDuVisiteur); // affiche 20

affiche 30 Console.WriteLine(ageDuVisiteur); // affiche 20

Anoterundétailquipeutparaitreévident,maistouteslesvariablessont

réinitialiséesàchaquenouvelleexécutionduprogramme.Dèsqu’ondémarrele

programme,lesclasseurssontvidés,commesionemménageaitdansdes

nouveauxlocauxàchaquefois.Ilestdoncimpossibledefairepersisterune

informationentredeuxexécutionsduprogrammeenutilisantdesvariables.

Pourceci,onutiliserad’autressolutions,commeenregistrerdesvaleursdansun

fichieroudansunebasededonnées.Nousyreviendronsultérieurement.

Lesdifférentstypesdevariables

Nousavonsvujusteau-dessusquelavariable«age»pouvaitêtreunentiernumérique

grâceaumotcléint.Leframework.NETdisposedebeaucoupdetypespermettantde

représenterbeaucoupdechosesdifférentes.

Parexemple,nouspouvonsstockerunechainedecaractèresgrâceautypestring.

string prenom = "nicolas";

ouencoreundécimalavec:

decimal soldeCompteBancaire = 100;

ouencoreunboolean(quireprésenteunevaleurvraieoufausse)avec

bool estVrai = true;

Ilestimportantdestockerdesdonnéesdansdesvariablesayantlebontype.bool estVrai = true ;

Onnepeutparexemplepasstockerleprénom“Nicolas”dansunentier.

Lesprincipauxtypesdebaseduframework.NETsont:

Type

Description

byte

Entierde0à255

short

Entierde-32768à32767

int

Entierde-2147483648à2147483647

long

Entierde-9223372036854775808à9223372036854775807

float

Nombresimpleprécisionde-3,402823e38à3,402823e38

double

Nombredoubleprécisionde-1,79769313486232e308à1,79769313486232e308

decimal

Nombredécimalconvenantparticulièrementauxcalculsfinanciers(enraisondesesnombressignificatifs

aprèslavirgule)

char

Représenteuncaractère

string

Unechainedecaractère

bool

Unevaleurbooléenne(vraioufaux)

Vousverrezplusloinqu’ilexisteencored’autrestypesdansleframework.NETetqu’on

peutégalementconstruirelessiens.

Affectations,opérations,concaténation

Ilestpossibled’effectuerdesopérationssurlesvariablesetentrelesvariables.Nous

avonsdéjàvucommentaffecterunevaleuràunevariablegrâceàl’opérateur=.

int age = 30; string prenom = "nicolas";

int age = 30 ; string prenom = "nicolas" ; Note:dansceparagraphe,jevaisvousdonnerplusieursexemples

Note:dansceparagraphe,jevaisvousdonnerplusieursexemples

d’affectations.Cesaffectationsserontfaitessurlamêmeinstructionquela

déclarationpourdesraisonsdeconcision.Maiscesexemplessontévidemment

fonctionnelspourdesaffectationsquisesituentàunendroitdifférentdela

déclaration.

Enplusdelasimpleaffectation,nouspouvonségalementfairedesopérations,par

exemple:

int resultat = 2 * 3;

ouencore

int age1 = 20; int age2 = 30; int moyenne = (age1 + age2) / 2;

Lesopérateurs«+»,«*»,«/»ouencore«-»(quenousn’avonspasencoreutilisé) serventbienévidemmentàfairelesopérationsmathématiquesquileurcorrespondent,à savoirrespectivementl’addition,lamultiplication,ladivisionetlasoustraction.

Vousaurezdoncsurementdevinéquelavariable«resultat»contient6etquelamoyenne

vaut25.

Ilestànoterquelesvariablescontiennentunevaleurquinepeutévoluerqu’enaffectant

unenouvellevaleuràcettevariable.

Ainsi,sij’ailecodesuivant:

int age1 = 20; int age2 = 30; int moyenne = (age1 + age2) / 2; age2 = 40;

lavariablemoyennevaudratoujours25mêmesij’aichangélavaleurdelavariable«

age2».Eneffet,lorsducalculdelamoyenne,j’airangédansmonclasseurlavaleur25

grâceàl’opérateurd’affectation«=»etj’airefermémonclasseur.Lefaitdechangerla

valeurduclasseur«age2»n’influenceenrienleclasseur«moyenne»danslamesureoù

ilestfermé.Pourlemodifier,ilfaudraitré-exécuterl’opérationd’affectationdelavariable

moyenne,enécrivantànouveaul’instructiondecalcul,c’est-à-dire:

int age1 = 20; int age2 = 30; int moyenne = (age1 + age2) / 2; age2 = 40; moyenne = (age1 + age2) / 2;

L’opérateur«+»peutégalementserviràconcaténerdeschainesdecaractères,par

exemple:

string codePostal = "33000"; string ville = "Bordeaux"; string adresse = codePostal + " " + ville; Console.WriteLine(adresse); // affiche : 33000 Bordeaux

D’autresopérateursparticuliersexistentquenousnetrouvonspasdanslescoursde mathématiques.Parexemple,l’opérateur++quipermetderéaliseruneincrémentationde

1,oul’opérateur—quipermetdefaireunedécrémentationde1.

Demême,lesopérateursquenousavonsdéjàvuspeuventsecumuleràl’opérateur=pour

simplifieruneopérationquiprendunevariablecommeopérandeetcettemêmevariable

commerésultat.

Parexemple:

int age = 20; age = age + 10; // age contient 30 (addition) age = age++; // age contient 31 (incrémentation de 1) age = age--; // age contient 30 (décrémentation de 1) age += 10; // équivalent à age = age + 10 (age contient 40) age /= 2; // équivalent à age = age / 2 => (age contient 20)

Commenousavonspulevoirdansnoscoursdemathématiques,ilestpossibledegrouper

desopérationsavecdesparenthèsespouragirsurleurspriorités.

Ainsi,l’instructionprécédemmentvue:

int moyenne = (age1 + age2) / 2;

effectuebienlasommedesdeuxâgesavantdelesdiviserpar2,carlesparenthèsessont

prioritaires.

Cependant,l’instructionsuivante:

int moyenne = age1 + age2 / 2;

auraitcommencépardiviserl’age2par2etauraitajoutél’age1,cequin’auraitplusrienà

voiravecunemoyenne.Eneffet,ladivisionestprioritaireparrapportàl’addition.

Attention,ladivisioniciestunpeuparticulière.Prenonscetexemple: int moyenne = 5 / 2 ;

Prenonscetexemple:

int moyenne = 5 / 2; Console.WriteLine(moyenne);

Sinousl’exécutons,nousvoyonsquemoyennevaut2.

2?Sijemerappellebiendemescoursdemath…c’estpasplutôt2.5?Sinousl’exécutons,nousvoyonsquemoyennevaut2. Ouietnon. Sinousdivisions5par2,nousobtenonsbien2.5.

Ouietnon.

Sinousdivisions5par2,nousobtenonsbien2.5.

Parcontre,icinousdivisonsl’entier5parl’entier2etnousstockonslerésultatdans

l’entiermoyenne.LeC#réaliseenfaitunedivisionentière,c’est-à-direqu’ilprendla

partieentièrede2.5,c’est-à-dire2.

Deplus,l’entiermoyenneestincapabledestockerunevaleurcontenantdeschiffresaprès lavirgule.Ilneprendraitquelapartieentière.

Pouravoir2.5,ilfaudraitutiliserlecodesuivant:

double moyenne = 5.0 / 2.0; Console.WriteLine(moyenne);

Ici,nousdivisonsdeux«doubles»entreeuxetnousstockonslerésultatdansun«double

».(Rappelez-vous,letypededonnées«double»permetdestockerdesnombresà

virgule.)

virgule.)

LeC#comprendqu’ils’agitdedoublecarnousavonsajoutéun.0derrière.

Sansça,ilconsidèrequeleschiffressontdesentiers.

Lescaractèresspéciauxdansleschainesdecaractères

Encequiconcernel’affectationdechainesdecaractères,vousrisquezd’avoirdes

surprisessivoustentezdemettredescaractèresspéciauxdansdesvariablesdetype

string.

Eneffet,unechainedecaractèresétantdélimitéepardesguillemets”“,commentfaire

pourquenotrechainedecaractèrespuissecontenirdesguillemets?

C’estlàqu’intervientlecaractèrespécial\quiseraàmettrejustedevantleguillemet,par

exemplelecodesuivant:

string phrase = "Mon prénom est \"Nicolas\""; Console.WriteLine(phrase);

affichera:

; Console.WriteLine(phrase); affichera:

Sivousaveztestéparvous-mêmel’instructionConsole.WriteLineetenchainéplusieurs

instructionsquiécriventdeslignes,vousavezpuremarquerquenouspassionsàlaligneà

chaquefois.C’estlerôledel’instructionWriteLinequiaffichelachainedecaractèreset

passeàlaligneàlafindelachaînedecaractères.

Nouspouvonsfairelamêmechoseenutilisantlecaractèrespécial«\n».Ilpermetde

passeràlaligneàchaquefoisqu’ilestrencontré.

Ainsi,lecodesuivant:

string phrase = "Mon prénom est \"Nicolas\"";

Console.WriteLine(phrase);

Console.WriteLine("Passe\nà\nla\nligne\n\n\n");

affichera:

"Passe\nà\nla\nligne\n\n\n" ); affichera: oùnousremarquonsbienlesdiverspassagesàlaligne.

oùnousremarquonsbienlesdiverspassagesàlaligne.

Vousmediriezqu’onpourraitenchaînerlesConsole.WriteLineetvousauriezraison.

Maislescaractèresspéciauxnouspermettentdefaired’autreschosescommeune

tabulationparexemplegrâceaucaractèrespécial«\t».Lecodesuivant:

Console.WriteLine("Choses à faire :"); Console.WriteLine("\t - Arroser les plantes"); Console.WriteLine("\t - Laver la voiture");

permettrad’afficherdestabulations,commeillustréci-dessous:

Nousavonsvuquelecaractère\étaituncaractèrespécialetqu’ilpermettaitdedireau

compilateurquenousvoulionsl’utilisercombinéàlavaleurquilesuit,permettantd’avoir

unetabulationouunretouràlaligne.Commentpourrons-nousavoirunechainede

caractèresquicontiennecefameuxcaractère?

Leprincipeestlemême,ilsuffiradefairesuivrecefameuxcaractèrespécialdelui-même

:

string fichier = "c:\\repertoire\\fichier.cs"; Console.WriteLine(fichier);

Cequidonnera:

; Console.WriteLine(fichier); Cequidonnera:

Pourcecasparticulier,ilestégalementpossibled’utiliserlasyntaxesuivanteenutilisant

lecaractèrespécial@devantlachainedecaractères:

string fichier = @"c:\repertoire\fichier.cs"; // contient : c:\repertoire\fichier.cs

Biensur,nouspouvonsstockerdescaractèresspéciauxdansdesvariablespourfairepar

exemple:

string sautDeLigne = "\n"; Console.WriteLine("Passer" + sautDeLigne + "à" + sautDeLigne + "la" + sautDeLigne + "ligne");

+ "la" + sautDeLigne + "ligne" );

Danscecas,lavariablesautDeLignepeutêtreremplacéeparuneespècede

variablequiexistedéjàdansleframework.NET,àsavoir

Environment.NewLine.

Cequipermetd’avoirlecodesuivant:

Console.WriteLine("Passer" + Environment.NewLine + "à" + Environment.NewLine + "la" + Environment.NewLine + "ligne");

permettantd’afficher:

Notezqu’ilestpossibledepasseràlalignelorsdel’écritured’uneinstruction

Notezqu’ilestpossibledepasseràlalignelorsdel’écritured’uneinstruction C#commejel’aifaitdansledernierboutdecodeafind’améliorerlalisibilité.

C#commejel’aifaitdansledernierboutdecodeafind’améliorerlalisibilité.

N’oubliezpasquec’estlepoint-virgulequiterminel’instruction.

Environment.NewLine?Uneespècedevariable?Qu’est-cequec’estquecettechoselà?

choselà?

Enfait,jetricheunpeusurlesmots.Pourfaciliterlacompréhension,onpeutconsidérer

queEnvironment.NewLineestunevariable,aumêmetitrequelavariable«sautDeLigne

»quenousavonsdéfini.Enréalité,c’estunpeupluscomplexequ’unevariable.Nous

découvrironsplusloindequoiils’agitvraiment.

Enrésumé

Unevariableestunezonemémoirepermettantdestockerunevaleurd’untype

particulier.

LeC#possèdepleindetypesprédéfinis,commelesentiers(int),leschaînesde

caractères(string),etc.

Onutilisel’opérateur=pouraffecterunevaleuràunevariable.

Ilestpossibledefairedesopérationsentrelesvariables.

Chapitre5

Lesinstructionsconditionnelles

Lesinstructionsconditionnelles DansnosprogrammesC#,nousallonsrégulièrementavoirbesoindefairedesopérations

DansnosprogrammesC#,nousallonsrégulièrementavoirbesoindefairedesopérations

enfonctiond’unrésultatprécédent.Parexemple,lorsd’unprocessusdeconnexionàune

application,sileloginetlemotdepassesontbons,alorsnouspouvonsnousconnecter,

sinonnousafficheronsuneerreur.

Ils’agitdecequel’onappelleunecondition.Elleestévaluéelorsdel’exécutioneten

fonctiondesonrésultat(vraioufaux)nousferonstelleoutellechose.

Bienquerelativementcourt,cechapitreesttrèsimportant.N’hésitezpasàlerelireetà

vousentraîner.

Lesopérateursdecomparaison

Uneconditionseconstruitgrâceàdesopérateursdecomparaison.Ondénombre

plusieursopérateursdecomparaisons,lespluscourantssont:

Opérateur Description

==

Egalité

!=

Différence

>

Supérieurà

<

Inférieurà

>=

Supérieurouégal

<=

Inférieurouégal

&&

ETlogique

||

OUlogique

!

Négation

Nousallonsvoircommentlesutiliserencombinaisonaveclesinstructions

conditionnelles.

L’instruction“if”

L’instructionifpermetd’exécuterducodesiuneconditionestvraie(if=sienanglais).

Parexemple:

decimal compteEnBanque = 300; if (compteEnBanque >= 0) Console.WriteLine("Votre compte est créditeur");

Ici,nousavonsunevariablecontenantlesoldedenotrecompteenbanque.Sinotresolde

estsupérieurouégalà0alorsnousaffichonsquelecompteestcréditeur.

Pourafficherquelecompteestdébiteur,onpourraittestersilavaleurdelavariableest

inférieureà0etafficherquelecompteestdébiteur:

decimal compteEnBanque = 300; if (compteEnBanque >= 0) Console.WriteLine("Votre compte est créditeur"); if (compteEnBanque < 0) Console.WriteLine("Votre compte est débiteur");

Uneautresolutionestd’utiliserlemotcléelse,quiveutdire«sinon»enanglais.

«Silavaleurestvraie,alorsonfaitquelquechose,sinon,onfaitautrechose»,cequise

traduitenC#par:

decimal compteEnBanque = 300; if (compteEnBanque >= 0) Console.WriteLine("Votre compte est créditeur");

else

Console.WriteLine("Votre compte est débiteur");

Ilfautbienserendrecomptequel’instructioniftestesiunevaleurestvraie(dans

l’exempleprécédentlacomparaisoncompteEnBanque>=0).

Onavurapidementdansleschapitresprécédentsqu’ilexistaituntypedevariablequi

permettaitdestockerunevaleurvraieoufausse:letypebool,autrementappelébooléen

(booleanenanglais).

Ainsi,ilseraégalementpossibledetesterlavaleurd’unbooléen.L’exempleprécédent

peutaussis’écrire:

decimal compteEnBanque = 300; bool estCrediteur = (compteEnBanque >= 0); if (estCrediteur) Console.WriteLine("Votre compte est créditeur");

else

Console.WriteLine("Votre compte est débiteur");

Ànoterquelesparenthèsesautourdel’instructiondecomparaisonsontfacultatives,jeles aiécritesicipourclairementidentifierquelavariable«estCrediteur»vacontenirune valeurquiestlerésultatdel’opérationdecomparaison«compteenbanqueestsupérieur

ouégalà0»,enl’occurrencevrai.

Voicid’autresexemplespourvouspermettred’appréhenderplusprécisémentle

fonctionnementdutypebool:

int age = 30; bool estAgeDe30Ans = age == 30; Console.WriteLine(estAgeDe30Ans); // affiche True bool estSuperieurA10 = age > 10; Console.WriteLine(estSuperieurA10); // affiche True bool estDifferentDe30 = age != 30; Console.WriteLine(estDifferentDe30); // affiche False

Untypeboolpeutprendredeuxvaleurs,vraioufaux,quis’écriventaveclesmotsclés

trueetfalse.

bool estVrai = true;

if (estVrai) Console.WriteLine("C'est vrai !");

else

Console.WriteLine("C'est faux !");

Ilestégalementpossibledecombinerlestestsgrâceauxopérateursdelogique

conditionnelle,parexemple&&quicorrespondàl’opérateurET.

Dansl’exemplequisuit,nousaffichonslemessagedebienvenueuniquementsilelogin

est«Nicolas»ETquelemotdepasseest«test».Sil’undesdeuxnecorrespondpas,

nousironsdansl’instructionelse.

string login = "Nicolas"; string motDePasse = "test"; if (login == "Nicolas" && motDePasse == "test") Console.WriteLine("Bienvenue Nicolas");

else

Console.WriteLine("Login incorrect");

); else Console.WriteLine( "Login incorrect" );

Remarquonsiciquenousavonsutiliséletestd’égalité«==»,ànepas

confondreavecl’opérateurd’affection«=».C’estuneerreurclassiquede

débutant.

D’autresopérateursdelogiquesexistent,nousavonsnotammentl’opérateur||qui

correspondauOUlogique:

if (civilite == "Mme" || civilite == "Mlle") Console.WriteLine("Vous êtes une femme");

else

Console.WriteLine("Vous êtes un homme");

L’exempleparledelui-même;silacivilitédelapersonneestMmeouMlle,alorsnous

avonsàfaireavecunefemme.

Anotericiquesilapremièreconditionduifestvraiealorsladeuxièmeneserapas

évaluée.C’estundétailici,maiscelapeuts’avérerimportantdanscertainessituations

dontunequenousverronsunpeuplusloin.

Unautreopérateurtrèscourantestlanégationquel’onutiliseavecl’opérateur«!».Par

exemple:

bool estVrai = true; if (!estVrai) Console.WriteLine("C'est faux !");

else

Console.WriteLine("C'est vrai !");

Cetestpourraitselireainsi:«SilanégationdelavariableestVraiestvraie,alorson

écrirac’estfaux».

Lavariable«estVrai»étantégaleàtrue,sanégationvautfalse.

Danscetexemple,leprogrammenousafficheradoncl’instructioncorrespondantauelse,

àsavoir«C’estvrai!».

Rappelez-vous,nousavonsditqu’uneinstructionsefinissaitengénéralparunpoint-

virgule.Commentcelasefait-ilalorsqu’iln’yaitpasdepoint-virguleàlafinduifoudu

else?

Etsinousécrivionsl’exempleprécédentdecettefaçon?

bool estVrai = true; if (!estVrai) Console.WriteLine("C'est faux !"); else Console.WriteLine("C'est vrai !");

Ceciesttoutàfaitvalableetpermetdevoiroùs’arrêtevraimentl’instructiongrâceau

point-virgule.Cependant,nousécrivonsengénéralcesinstructionsdelapremièrefaçon

afinquecelles-cisoientpluslisibles.

Vousaurezl’occasionderencontrerdansleschapitressuivantsd’autresinstructionsquine

seterminentpasobligatoirementparunpoint-virgule.

seterminentpasobligatoirementparunpoint-virgule.

Nousverronsdanslechapitresuivantcommentexécuterplusieursinstructions

aprèsuneinstructionconditionnelleenlesgroupantdansdesblocsdecode,

délimitéspardesaccolades«{»et«}».

Remarquonsenfinqu’ilestpossibled’enchaînerlestestsdemanièreàtraiterplusieurs

conditionsenutilisantlacombinaisonelse-if.Celadonne:

if (civilite == "Mme") Console.WriteLine("Vous êtes une femme"); else if (civilite == "Mlle") Console.WriteLine("Vous êtes une femme non mariée"); else if (civilite == "M.") Console.WriteLine("Vous êtes un homme");

else

Console.WriteLine("Je n'ai pas pu déterminer votre civilité");

L’instruction“Switch”

L’instructionswitchpeutêtreutiliséelorsqu’unevariablepeutprendrebeaucoupde

valeurs.Ellepermetdesimplifierl’écriture.

Ainsi,l’instructionsuivante:

string civilite = "M."; if (civilite == "M.") Console.WriteLine("Bonjour monsieur"); if (civilite == "Mme") Console.WriteLine("Bonjour madame"); if (civilite == "Mlle") Console.WriteLine("Bonjour mademoiselle");

pourras’écrire:

string civilite = "M."; switch (civilite)

{

case "M." :

Console.WriteLine("Bonjour monsieur"); break; case "Mme":

Console.WriteLine("Bonjour madame"); break; case "Mlle":

Console.WriteLine("Bonjour mademoiselle"); break;

}

Switchcommenceparévaluerlavariablequiluiestpasséeentreparenthèses.Avecle

motclécaseonénumèrelesdifférentscaspossiblepourlavariableetonexécuteles

instructionscorrespondantejusqu’aumotclébreakquisignifiequel’onsortduswitch.

Nouspouvonségalementindiquerunevaleurpardéfautenutilisantlemotclédefault,

ainsidansl’exemplesuivanttoutcequin’estpas«M.»ou«Mme»ou«Mlle»donnera

l’affichaged’un«Bonjourinconnu»:

switch (civilite)

{

case "M." :

Console.WriteLine("Bonjour monsieur"); break; case "Mme":

Console.WriteLine("Bonjour madame"); break; case "Mlle":

Console.WriteLine("Bonjour mademoiselle"); break; default:

Console.WriteLine("Bonjour inconnu"); break;

}

Nouspouvonségalementenchainerplusieurscaspourqu’ilsfassentlamêmechose,ce

quireproduitlefonctionnementdel’opérateurlogiqueOU(«||»).Parexemple,onpourra

remplacerl’exemplesuivant:

string mois = "Janvier"; if (mois == "Mars" || mois == "Avril" ||

Console.WriteLine("C'est le printemps"); if (mois == "Juin" || mois == "Juillet" || mois == "Aout") Console.WriteLine("C'est l'été"); if (mois == "Septembre" || mois == "Octobre" || mois == "Novembre") Console.WriteLine("C'est l'automne"); if (mois == "Decembre" || mois == "Janvier" || mois == "Février") Console.WriteLine("C'est l'hiver");

par:

mois == "Mai")

switch (mois)

{

case "Mars":

case "Avril":

case "Mai":

Console.WriteLine("C'est le printemps"); break; case "Juin":

case "Juillet":

case "Aout":

Console.WriteLine("C'est l'été"); break; case "Septembre":

case "Octobre":

case "Novembre":

Console.WriteLine("C'est l'automne"); break; case "Décembre":

case "Janvier":

case "Février":

Console.WriteLine("C'est l'hiver"); break;

}

Quiallègequandmêmel’écritureetlarendbeaucouppluslisible.

Enrésumé

Lesinstructionsconditionnellespermettentd’exécuterdesinstructionsseulementsi

uneconditionestvérifiée.

Onutiliseengénérallerésultatd’unecomparaisondansuneinstruction

conditionnelle.

LeC#possèdebeaucoupd’opérateursdecomparaison,commel’opérateurd’égalité

==,l’opérateurdesupériorité>,d’infériorité<,etc.

Chapitre6

Lesblocsdecodeetlaportéed’unevariable

Lesblocsdecodeetlaportéed’unevariable Nousavonsrégulièrementutilisédanslechapitreprécédentlesaccoladesouvranteset

Nousavonsrégulièrementutilisédanslechapitreprécédentlesaccoladesouvranteset

fermantes:\{et\}.Nousavonsrapidementditquecesaccoladesservaientàcréerdes

blocsdecode.

L’utilisationd’accoladesimpliqueégalementuneautresubtilité.Vousl’avezvudansle

titreduchapitre,ils’agitdelaportéed’unevariable.

Regardonsàprésentcommentcelafonctionne.

Lesblocsdecode

Lesblocsdecodepermettentdegrouperplusieursinstructionsquivonts’exécuterdansle

mêmecontexte.

Celapeutêtrelecasparexempleaprèsunif,nouspourrionssouhaitereffectuerplusieurs

instructions.Parexemple:

decimal compteEnBanque = 300; if (compteEnBanque >= 0)

{

 

Console.WriteLine("Votre compte est créditeur"); Console.WriteLine("Voici comment ouvrir un livret …");

}

else

{

 

Console.WriteLine("Votre compte est débiteur"); Console.WriteLine("N’oubliez pas que les frais de découverts sont de …");

}

Ici,nousenchaînonsdeuxConsole.WriteLineenfonctiondurésultatdelacomparaisonde

compteEnBanqueavec0.

Lesblocsdecodeserontutilesdèsqu’onvoudraregrouperplusieursinstructions.C’estle

caspourlesinstructionsconditionnellesmaisnousverronsbeaucoupd’autresutilisations,

commeleswitchquenousavonsvujusteau-dessus,lesbouclesoulesméthodesquenous

allonsaborderdanslechapitresuivant.

Laportéed’unevariable

C#…portée…onsecroiraitaucoursdemusique…

Enfait,la«portéed’unevariable»estlazonedecodedanslaquelleunevariableest

utilisable.Ellecorrespondengénéralaublocdecodedanslequelestdéfinielavariable.

Ainsi,lecodesuivant:

static void Main(string[] args)

{

 

string prenom = "Nicolas"; string civilite = "M."; if (prenom == "Nicolas")

{

int age = 30;

Console.WriteLine("Votre age est : " + age); switch (civilite)

{

case "M.":

Console.WriteLine("Vous êtes un homme de " + age + " ans"); break; case "Mme":

Console.WriteLine("Vous êtes une femme de " + age + " ans"); break;

}

}

if (age >= 18)

{

Console.WriteLine(prenom + ", vous êtes majeur");

}

}

estincorrectetprovoquerauneerreurdecompilation.Eneffet,nousessayonsd’accéderà lavariable«age»endehorsdublocdecodeoùelleestdéfinie.Nousvoyonsquecette variableestdéfiniedansleblocquiestexécutélorsqueletestd’égalitéduprénomavecla

chaine«Nicolas»estvraialorsquenousessayonsdelacomparerà18dansunendroitoù

ellen’existeplus.

Nouspouvonsutiliser«age»sansaucunproblèmedanstoutlepremierif,etmêmedans

lessousblocsdecode,commec’estlecasdanslesousblocduswitch,maispasendehors

dublocdecodedanslequellavariableestdéfinie.Ainsi,lavariable«prenom»est

accessibledansledernierifcarelleaétédéfiniedansunblocpère.

Vousnoterezqu’ici,lacomplétionnousestutile.Eneffet,VisualC#expressproposede

nouscompléterlenomdelavariabledansunblocoùelleestaccessible.Dansunblocoù

ellenel’estpas,lacomplétionautomatiquenenouslaproposepas.

CommeVisualC#expressestmalincommeunemachine,silacomplétionneproposepas

cequevoussouhaitez,c’estprobablementquevousn’yavezpasledroit.Unedes

explicationspeutêtrequelaportéenevousl’autorisepas.

Pourcorrigerl’exempleprécédent,ilfautdéclarerlavariable«age»aumêmeniveauque

lavariableprénom.

lavariableprénom.

Ok,maisalors,pourquoionnedéclareraitpastoutaudébutunebonnefoispour

toute?Celaéviteraitceserreurs…non?

Evidemmentnon,vousverrezqu’iln’estpaspossibledefairecela.Généralement,

l’utilisationdevariablesaccessiblesdepartoutestunemauvaisepratiquede

développement(c’estcequ’onappelledesvariables«globales»).Mêmesionpeutavoir

unéquivalentenC#,ilfautserappelerqueplusunevariableestutiliséedanslapluspetite

portéepossible,mieuxelleserautiliséeetpluselleserapertinente.

Jevousconseilledoncd’essayerdedéterminerleblocdecodeminimaloùl’utilisationde

lavariableestadaptée.

Enrésumé

Unblocdecodepermetderegrouperdesinstructionsquicommencentpar\{etqui

finissentpar\}.

Unevariabledéfinieàl’intérieurd’unblocdecodeaurapourportéeceblocdecode.

Chapitre7

Lesméthodes

Lesméthodes Élémentindispensabledetoutprogrammeinformatique,uneméthoderegroupeun

Élémentindispensabledetoutprogrammeinformatique,uneméthoderegroupeun

ensembled’instructions,pouvantprendredesparamètresetpouvantrenvoyerunevaleur.

Lorsdevosdéveloppements,vousallezavoirbesoindecréerbeaucoupdeméthodes.

Nousallonsdécouvrirlesméthodesdanscechapitremaisnousyreviendronspetitàpetit

toutaulongdececoursetvousaurezainsil’occasiond’approfondirvosconnaissances.

Vouspourreztrouverdetempsentempslemot«fonction»àlaplacedumot«méthode

».Celasignifielamêmechose.

C’estunereliquedupassécorrespondantàunancienmodededéveloppementquis’utilise

demoinsenmoins,demêmequeleterme«procédure»quiestencoreplusvieux!

Créeruneméthode

Lebutdelaméthodeestdefactoriserducodeafind’éviterd’avoiràrépétersansarrêtle

mêmecodeetcecipourdeuxraisonsessentielles:

Déjàparcequel’hommeestunêtreparesseuxquiutilisesonintelligencepouréviter

letravailinutile.

Ensuiteparcequesijamaisilyaquelquechoseàcorrigerdansceboutdecodeets’il

estdupliquéàplusieursendroits,alorsnousallonsdevoirfaireunecorrectiondans

touscesendroits.Silecodeestfactoriséàununiqueendroit,nousferonsuneunique

correction.(Ouioui,encorelaparessemaisaussicelapermetd’éviterd’oublierun

boutdecodedansunendroitcaché).

Cesoucidefactorisationestconnucommeleprincipe«DRY»quiestl’acronymedes

motsanglais«Don’tRepeatYourself»,cequiveutbiensûrdire:«Nevousrépétezpas

».Lebutdeceprincipeestdenejamais(àquelquesexceptionsprèsbiensûr…)avoirà

réécrirelamêmelignedecode.

Parexemple,imaginonsquelquesinstructionsquis’occupentd’écrireunmessagede

bienvenueaveclenomdel’utilisateur.LecodeC#pourraitêtre:

Console.WriteLine("Bonjour Nicolas"); Console.WriteLine("-------" + Environment.NewLine); Console.WriteLine("\tBienvenue dans le monde merveilleux du C#");

Note:Dansl’instructionConsole.WriteLinequenousutilisonsrégulièrement,

WriteLineestuneméthode.Siplustard,onveutré-afficherlemessagedebienvenue,ilfaudraréécrireces4lignesde codes.Saufsinousutilisonsuneméthode:

Siplustard,onveutré-afficherlemessagedebienvenue,ilfaudraréécrireces4lignesde

codes.Saufsinousutilisonsuneméthode:

static void AffichageBienvenue()

{

Console.WriteLine("Bonjour Nicolas"); Console.WriteLine("-------" + Environment.NewLine); Console.WriteLine("\tBienvenue dans le monde merveilleux du C#");

}

Dansl’exempleprécédent,jedéfinisuneméthodequis’appelleAffichageBienvenue.

L’instruction:

static void AffichageBienvenue()

estcequ’onappellelasignaturedelaméthode.Ellenousrenseignesurlesparamètresde

laméthodeetsurcequ’ellevarenvoyer.

Lemotclévoidsignifiequelaméthodenerenvoierien.Lesparenthèsesvidesàlafinde

lasignatureindiquentquelaméthoden’apasdeparamètres.

C’estlaformedelaméthodelaplussimplepossible.lasignatureindiquentquelaméthoden’apasdeparamètres. Lemotclé static

Lemotcléstaticnenousintéressepaspourl’instant,maissachezqu’ilsertàindiquer

quelaméthodeesttoujoursdisponibleetprêteàêtreutilisée.Danscecontexte,ilest

obligatoire.Nousyreviendrons.

En-dessousdelasignaturedelaméthode,nousretrouvonslesaccolades.Ellespermettent

dedélimiterlaméthode.Leblocdecodeainsiforméconstituecequ’onappellele«corps

delaméthode».

Enrésumé,pourdéclareruneméthode,nousaurons:

Signature de la méthode

{

Bloc de code de la méthode

}

Nouspouvonsdésormaisappeler(c’est-à-dire:exécuter)cetteméthodedansnotre

programmegrâceàsonnom.Parexemple,icijel’appelletrèsfacilement2foisdesuite:

static void Main(string[] args)

{

 

AffichageBienvenue();

AffichageBienvenue();

}

static void AffichageBienvenue()

{

Console.WriteLine("Bonjour Nicolas"); Console.WriteLine("-------" + Environment.NewLine); Console.WriteLine("\tBienvenue dans le monde merveilleux du C#");

}

Ettoutça,sansefforts!C’estquandmêmeplussimpleetplusclair,non?

LaméthodespécialeMain()

Lasignaturedelaméthodequel’onvientdecréernevousrappellerien?Maissi,l’autre

blocau-dessusdenotreméthode,quiressembleluiaussiàuneméthode.

Ils’agitd’uneméthodespéciale,laméthodeMain().

ElleaétégénéréeparVisualC#expresslorsquenousavonscrééleprojetConsole.

Cetteméthodeestenfaitlepointd’entréedel’application,c’est-à-direquequandleCLR

tented’exécuternotreapplication,ilrecherchecetteméthodeafindepouvoircommencer

àexécuterdesinstructionsàpartird’elle.S’ilnelatrouvepas,alors,ilnepourrapas

exécuternotreapplication.C’estpourcelaqu’ilestimportantquecetteméthodesoit

accessibledepartout;rappelez-vous,c’estgrâceaumotcléstaticquenousaurons

l’occasiond’étudierplusendétailultérieurement.

VisualC#expressnousgardebiendecetteerreur.Eneffet,sivoussupprimezcette

méthode(ouquevousenlevezlemotcléstatic)etquevoustentezdecompilernotre

application,vousaurezlemessaged’erreursuivant:

Citation:Compilateur

Erreur1Leprogramme‘C:\Users\Nico\Documents\VisualStudio

2010\Projects\C#\MaPremiereApplication\MaPremiereApplication\obj\x86\Release\MaPre

necontientpasuneméthode‘Main’statiqueappropriéepourunpointd’entrée

Lemessaged’erreurestclair.Ilabesoind’uneméthodeMain()pourdémarrer.

Main() pourdémarrer.

VoilàpourcetteméthodespécialeMain().Elleestindispensabledanstout

programmeexécutableetc’estparlàqueleprogrammedémarre.

Leslecteursattentifsaurontremarquéquecetteméthodepossèdedeschosesdansla

signature,entrelesparenthèses…Desparamètres!Découvrons-lesdansleprochain

chapitre…

Paramètresd’uneméthode

Super,noussavonscréerdesméthodes.Nousallonspouvoircréeruneméthodequi

permetdesouhaiterlabienvenueàlapersonnequivientdeseconnecterànotre

applicationparexemple.Sic’estNicolasquivientdeseconnecter,nousallonspouvoir

appelerlaméthodeAffichageBienvenueNicolas().Sic’estJérémie,nousappelleronsla

méthodeAffichageBienvenueJeremie(),etc…

static void AffichageBienvenueNicolas()

{

Console.WriteLine("Bonjour Nicolas"); Console.WriteLine("-------" + Environment.NewLine); Console.WriteLine("\tBienvenue dans le monde merveilleux du C#");

}

static void AffichageBienvenueJeremie()

{

Console.WriteLine("Bonjour Jérémie"); Console.WriteLine("-------" + Environment.NewLine); Console.WriteLine("\tBienvenue dans le monde merveilleux du C#");

}

Bof…finalement,cen’estpassisuperqueçaenfait.Alorsquenousvenionsjuste

d’évoquerleprincipeDRY,nousnousretrouvonsavecdeuxméthodesquasiment

identiquesquinediffèrentqued’unetoutepetitechose.

C’estlàqu’interviennentlesparamètresdeméthodes.Nousl’avonsévoquéauparagraphe

précédent,ilestpossibledepasserdesparamètresàuneméthode.Ainsi,nouspourrons

utiliserlesvaleursdecesparamètresdanslecorpsdenosméthodes,lesméthodesen

deviendrontd’autantplusgénériques.

Dansnotreexempled’affichagedemessagedebienvenue,ilestévidentquelenomde

l’utilisateurseraunparamètredelaméthode.

Lesparamètress’écriventàl’intérieurdesparenthèsesquisuiventlenomdelaméthode.

Nousdevonsindiquerletypeduparamètreainsiquelenomdelavariablequile

représenteraauseindelaméthode.

Ilestpossibledepasserplusieursparamètresàuneméthode,onlessépareraavecune

virgule.Parexemple:

static void DireBonjour(string prenom, int age)

{

Console.WriteLine("Bonjour " + prenom); Console.WriteLine("Vous avez " + age + " ans");

}

Ici,laméthodeDireBonjourprendenparamètresunechainedecaractèresprenometun

entierage.

Laméthodeaffiche«Bonjour»ainsiquelecontenudelavariableprenom.Demême,juste

endessous,elleaffichel’âgequiaétépasséenparamètres.

Nouspourronsappelercetteméthodedecettefaçon,depuislaméthodeMain():

static void Main(string[] args)

{

DireBonjour("Nicolas", 30); DireBonjour("Jérémie", 20);

}

Etnousaurons:

); DireBonjour( "Jérémie" , 20 ); } Etnousaurons:

Biensûr,ilestobligatoiredefournirenparamètresd’uneméthodeunevariabledumême

typequeleparamètre.Sinon,lecompilateurseraincapabledemettreladonnéequiaété

passéedansleparamètre.D’ailleurs,sivousnefournissezpaslebonparamètre,vous

aurezdroitàuneerreurdecompilation.

Parexemple,sivousappelezlaméthodeaveclesparamètressuivants:

DireBonjour(10, 10);

Vousaurezl’erreurdecompilationsuivante:

Citation:Compilateur

impossibledeconvertirde‘int’en‘string’

Ilestévidemmentpossibledepasserdesvariablesàuneméthode,celafonctionnedela

mêmefaçon:

string prenom = "Nicolas"; DireBonjour(prenom, 30);

Nousallonsrevenirplusendétailsurcequ’ilsepasseexactementicidanslechapitresur

lemodedepassagedesparamètres.

Vousvoyez,celaressemblebeaucoupàcequenousavonsdéjàfaitaveclaméthode

Console.WriteLine().Facile,non?

Console.WriteLine() .Facile,non? Laméthode Console.WriteLine

LaméthodeConsole.WriteLinefaitpartiedelabibliothèqueduframework.NETetest

utiliséepourécriredeschainesdecaractères,desnombresoupleind’autreschosessurla

console.Leframework.NETcontienténormémentdeméthodesutilitairesdetoutessortes,

nousyreviendrons.

Vousaurezpeut-êtreremarquéundétail,nousavonspréfixétoutesnosméthodesdumot

cléstatic.J’aiditquec’étaitobligatoiredansnotrecontexte,pourêtreplusprécis,c’est

parcequelaméthodeMain()eststatiquequenoussommesobligésdecréerdesméthodes

statiques.OnaditquelaméthodeMain()étaitobligatoirementstatiqueparcequ’elle

devaitêtreaccessibledepartoutafinqueleCLRpuissetrouverlepointd’entréedenotre

programme.Or,uneméthodestatiquenepeutappelerquedesméthodesstatiques,c’est

pourcelaquenoussommesobligés(pourl’instant)depréfixernosméthodesparlemot

cléstatic.Nousdécrironscequerecouvreexactementlemotcléstaticdanslapartie

suivante.

Retourd’uneméthode

Uneméthodepeutaussirenvoyerunevaleur,parexempleuncalcul.C’estsouvent d’ailleurssonutilitépremière. Onpourraitimaginerparexempleuneméthodequicalculelalongueurdel’hypoténuseà

partirdes2côtésd’untriangle.Sachantquea²+b²=c²,nouspouvonsimaginerune

méthodequiprendenparamètreslalongueurdes2cotés,faitlasommedeleurcarréset

renvoielaracinecarrédurésultat.C’estcequefaitlaméthodesuivante:

static double LongueurHypotenuse(double a, double b)

{

double sommeDesCarres = a * a + b * b; double resultat = Math.Sqrt(sommeDesCarres); return resultat;

}

Continuonsàignorerlemotcléstatic.Vousaurezremarquéquelasignaturedela

méthodecommenceparlemotclédouble,quiindiquequelaméthodevanousrenvoyer unevaleurdutypedouble.Commeonl’avu,double aetdouble bsontdeuxparamètres delaméthodeetsontdutypedouble. LaméthodeMath.Sqrtestuneméthodeduframework.NET,aumêmetitrequela méthodeConsole.WriteLine,quipermetderenvoyerlaracinecarréed’unnombre.Elle prendenparamètreundoubleetnousretourneunevaleurdetypedoubleégalementqui correspondàlaracinecarréeduparamètre.C’esttoutnaturellementquenousstockonsce résultatdansunevariablegrâceàl’opérateurd’affectation«=». Àlafindelaméthode,lemotcléreturnindiquequelaméthoderenvoielavaleuràla méthodequil’aappelée.Ici,nousrenvoyonslerésultat. Cetteméthodepourras’utiliserainsi:

static void Main(string[] args)

{

double valeur = LongueurHypotenuse(1, 3); Console.WriteLine(valeur); valeur = LongueurHypotenuse(10, 10); Console.WriteLine(valeur);

}

Commeprécédemment,nousutilisonsunevariablepourstockerlerésultatdel’exécution

delaméthode.

Cequiproduiracommerésultat:

delaméthode. Cequiproduiracommerésultat:

Ànoterqu’ilestégalementpossibledesepasserd’unevariableintermédiairepourstocker

lerésultat.Ainsi,nouspourronsparexemplefaire:

Console.WriteLine("Le résultat est : " + LongueurHypotenuse(1, 3));

AveccetteécriturelerésultatrenvoyéparlaméthodeLongueurHypotenuseestdirectement

concaténéàlachaine“Lerésultatest:”etestpasséenparamètreàlaméthode

Console.WriteLine.

Remarquezqu’onafaitl’opérationa*apourmettre«a»aucarré.Onauraitégalementpu faireMath.Pow(a, 2)quipermetdefairelamêmechose,ladifférenceestquePowpermet demettreàlapuissancequel’onsouhaite.Ainsi,Math.Pow(a, 3)permetdemettre«a» aucube.

Ilfautsavoirquelemotcléreturnpeutapparaitreàn’importequelendroitdelaméthode.

Ilinterromptalorsl’exécutiondecelle-cietrenvoielavaleurpassée.Cemot-cléest

obligatoire,sanscelalaméthodenecompilerapas.

Ilestégalementprimordialquetouslescheminspossiblesd’uneméthoderenvoient

quelquechose.Lescheminssontdéterminésparlesinstructionsconditionnellesquenous

avonsvuesprécédemment.

Ainsi,l’exemplesuivantestcorrect:

static string Conjugaison(string genre)

{

if (genre == "homme") return "é";

else

return "ée";

}

carpeuimportelavaleurdelavariable«genre»,laméthoderenverraunechaine.

Alorsquecelui-ci:

static string Conjugaison(string genre)

{

if (genre == "homme") return "é";

else

{

if (genre == "femme") return "ée";

}

}

estincorrect.Eneffet,querenvoielaméthodesilavariable«genre»contientautrechose

quehommeoufemme?

Engénéral,VisualC#expressnousindiqueraqu’ildétecteunproblèmeavecuneerreurde

compilation.

Nouspourronscorrigerceciavecparexemple:

static string Conjugaison(string genre)

{

}

if (genre == "homme") return "é";

else

{

if (genre == "femme") return "ée";

}

return "";

) return "ée" ; } return "" ;

Ànoterque””correspondàunechainevideetpeutégalements’écrire:

string.Empty.

Nousavonsvudanslechapitreprécédentqu’ilétaitpossibledecréerdesméthodesquine

retournentrien.Danscecas,onpeututiliserlemotcléreturnsansvaleurquilesuitpour

stopperl’exécutiondelaméthode.Parexemple:

static void Bonjour(string prenom)

{

if (prenom == "inconnu") return; Console.WriteLine("Bonjour " + prenom);

}

Ainsi,silavariable«prenom»vaut«inconnu»,alorsnousquittonslaméthodeBonjour

etl’instructionConsole.WriteLineneserapasexécutée.

Enrésumé

Uneméthoderegroupeunensembled’instructionspouvantprendredesparamètreset

pouvantrenvoyerunevaleur.

Lesparamètresd’uneméthodedoiventêtreutilisésaveclebontype.

Uneméthodequinerenvoierienestpréfixéedumot-clévoid.

Lepointd’entréed’unprogrammeestlaméthodestatiqueMain().

Lemot-cléreturnpermetderenvoyerunevaleurdutypederetourdelaméthode,à

l’appelantdecetteméthode.

Chapitre8

Tableaux,listeseténumérations

Tableaux,listeseténumérations Dansleschapitresprécédents,nousavonspuutiliserlestypesdebaseduframework .NET,comme int ,

Dansleschapitresprécédents,nousavonspuutiliserlestypesdebaseduframework

.NET,commeint,string,double,etc.Nousallonsdécouvriricid’autrestypesquivont

s’avérertrèsutilesdanslaconstructiondenosapplicationsinformatiques.

Unefoisbienmaîtrisés,vousnepourrezplusvousenpasser!

Lestableaux

Voicilepremiernouveautypequenousallonsétudier,letype«tableau».Endéclarant

unevariabledetypetableau,nousallonsenfaitutiliserunevariablequicontientunesuite

devariablesdumêmetype.Prenonscetexemple:

string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" };

Nousdéfinissonsiciuntableaudechainedecaractèresquicontient7chainesde

caractères,àsavoirlesjoursdelasemaine.Nefaitespastropattentionàl’opérateurnew

pourl’instant,nousyreviendronsplustard;ilpermetsimplementdecréerletableau.

Lescrochets«[]»quisuiventlenomdutypepermettentdesignaleraucompilateurque

noussouhaitonsutiliseruntableaudecetype-là,iciletypestring.

Untableau,c’estunpeucommeunearmoiredanslaquelleonrangedesvariables.Chaque

variableestposéesuruneétagère.Pouraccéderàlavariablequiestposéesuruneétagère,

onutiliselenomdel’armoireetonindiquel’indicedel’étagèreoùeststockéelavariable,

enutilisantdescrochets[]:

Console.WriteLine(jours[3]); // affiche Jeudi Console.WriteLine(jours[0]); // affiche Lundi Console.WriteLine(jours[10]);