[{"data":1,"prerenderedAt":1086},["ShallowReactive",2],{"page-\u002Fcsharp\u002Fclasses-proprietes-records":3,"pieces-csharp":1043,"autour-\u002Fcsharp\u002Fclasses-proprietes-records":1068,"prerequis-\u002Fcsharp\u002Fclasses-proprietes-records":1073,"plan-csharp":1075},{"id":4,"title":5,"body":6,"description":1007,"extension":1008,"ligne":74,"meta":1009,"motsCles":1010,"navigation":154,"niveau":1014,"path":1015,"prerequis":1016,"ressources":1018,"seo":1031,"sources":1032,"stem":1041,"__hash__":1042},"docs\u002Fcsharp\u002F04.classes-proprietes-records.md","Classes, propriétés et records",{"type":7,"value":8,"toc":996},"minimark",[9,14,36,40,53,64,68,276,279,312,318,322,329,410,421,433,437,444,603,620,630,678,682,688,760,763,767,770,843,850,892,899,903,936,948,952,992],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,29],"ul",{},[18,19,20],"li",{},"Écrire une classe avec des propriétés, un constructeur et une méthode.",[18,22,23,24,28],{},"Protéger les données d'un objet avec ",[25,26,27],"code",{},"private",".",[18,30,31,32,35],{},"Utiliser un ",[25,33,34],{},"record"," pour des données simples, comparées par leur contenu.",[10,37,39],{"id":38},"pourquoi-une-classe","Pourquoi une classe",[41,42,43,44,47,48,52],"p",{},"Jusqu'ici, une recette était une simple variable ",[25,45,46],{},"string",". Or une recette a un nom, un temps de préparation et des ingrédients. Une ",[49,50,51],"strong",{},"classe"," regroupe ces informations et les actions associées dans un même modèle.",[41,54,55,56,59,60,63],{},"Une classe est un plan. Un ",[49,57,58],{},"objet"," est un exemplaire construit à partir de ce plan. Avec une classe ",[25,61,62],{},"Recette",", tu peux créer autant de recettes que tu veux.",[10,65,67],{"id":66},"une-première-classe","Une première classe",[69,70,76],"pre",{"className":71,"code":72,"filename":73,"language":74,"meta":75,"style":75},"language-csharp shiki shiki-themes github-light-default github-dark-default github-dark-default","public class Recette\n{\n    public string Nom { get; set; }\n    public int Minutes { get; set; }\n\n    public Recette(string nom, int minutes)\n    {\n        Nom = nom;\n        Minutes = minutes;\n    }\n\n    public string Resume() => $\"{Nom} ({Minutes} min)\";\n}\n","Recette.cs","csharp","",[25,77,78,94,101,128,149,156,185,191,203,214,220,225,270],{"__ignoreMap":75},[79,80,83,87,90],"span",{"class":81,"line":82},"line",1,[79,84,86],{"class":85},"sOnC1","public",[79,88,89],{"class":85}," class",[79,91,93],{"class":92},"sIXEE"," Recette\n",[79,95,97],{"class":81,"line":96},2,[79,98,100],{"class":99},"scfrF","{\n",[79,102,104,107,110,113,116,119,122,125],{"class":81,"line":103},3,[79,105,106],{"class":85},"    public",[79,108,109],{"class":85}," string",[79,111,112],{"class":92}," Nom",[79,114,115],{"class":99}," { ",[79,117,118],{"class":85},"get",[79,120,121],{"class":99},"; ",[79,123,124],{"class":85},"set",[79,126,127],{"class":99},"; }\n",[79,129,131,133,136,139,141,143,145,147],{"class":81,"line":130},4,[79,132,106],{"class":85},[79,134,135],{"class":85}," int",[79,137,138],{"class":92}," Minutes",[79,140,115],{"class":99},[79,142,118],{"class":85},[79,144,121],{"class":99},[79,146,124],{"class":85},[79,148,127],{"class":99},[79,150,152],{"class":81,"line":151},5,[79,153,155],{"emptyLinePlaceholder":154},true,"\n",[79,157,159,161,165,168,170,173,176,179,182],{"class":81,"line":158},6,[79,160,106],{"class":85},[79,162,164],{"class":163},"syCW7"," Recette",[79,166,167],{"class":99},"(",[79,169,46],{"class":85},[79,171,172],{"class":92}," nom",[79,174,175],{"class":99},", ",[79,177,178],{"class":85},"int",[79,180,181],{"class":92}," minutes",[79,183,184],{"class":99},")\n",[79,186,188],{"class":81,"line":187},7,[79,189,190],{"class":99},"    {\n",[79,192,194,197,200],{"class":81,"line":193},8,[79,195,196],{"class":99},"        Nom ",[79,198,199],{"class":85},"=",[79,201,202],{"class":99}," nom;\n",[79,204,206,209,211],{"class":81,"line":205},9,[79,207,208],{"class":99},"        Minutes ",[79,210,199],{"class":85},[79,212,213],{"class":99}," minutes;\n",[79,215,217],{"class":81,"line":216},10,[79,218,219],{"class":99},"    }\n",[79,221,223],{"class":81,"line":222},11,[79,224,155],{"emptyLinePlaceholder":154},[79,226,228,230,232,235,238,241,245,248,251,254,257,259,262,264,267],{"class":81,"line":227},12,[79,229,106],{"class":85},[79,231,109],{"class":85},[79,233,234],{"class":163}," Resume",[79,236,237],{"class":99},"() ",[79,239,240],{"class":85},"=>",[79,242,244],{"class":243},"shWOn"," $\"",[79,246,247],{"class":243},"{",[79,249,250],{"class":99},"Nom",[79,252,253],{"class":243},"}",[79,255,256],{"class":243}," (",[79,258,247],{"class":243},[79,260,261],{"class":99},"Minutes",[79,263,253],{"class":243},[79,265,266],{"class":243}," min)\"",[79,268,269],{"class":99},";\n",[79,271,273],{"class":81,"line":272},13,[79,274,275],{"class":99},"}\n",[41,277,278],{},"Cette classe contient trois éléments :",[280,281,282,298,305],"ol",{},[18,283,284,285,175,288,290,291,293,294,290,296,28],{},"Deux ",[49,286,287],{},"propriétés",[25,289,250],{}," et ",[25,292,261],{}," : des données de l'objet, lues et modifiées avec ",[25,295,118],{},[25,297,124],{},[18,299,300,301,304],{},"Un ",[49,302,303],{},"constructeur",", une méthode qui porte le nom de la classe et prépare l'objet à sa création.",[18,306,307,308,311],{},"Une méthode ",[25,309,310],{},"Resume"," qui utilise les propriétés.",[41,313,314,315,317],{},"Le mot-clé ",[25,316,86],{}," rend l'élément accessible depuis l'extérieur de la classe.",[10,319,321],{"id":320},"créer-et-utiliser-un-objet","Créer et utiliser un objet",[41,323,324,325,328],{},"Avec le mot-clé ",[25,326,327],{},"new",", tu appelles le constructeur :",[69,330,333],{"className":71,"code":331,"filename":332,"language":74,"meta":75,"style":75},"var crepes = new Recette(\"Crêpes\", 30);\n\nConsole.WriteLine(crepes.Nom);\nConsole.WriteLine(crepes.Resume());\n\ncrepes.Minutes = 25;\n","Program.cs",[25,334,335,365,369,380,394,398],{"__ignoreMap":75},[79,336,337,340,343,346,349,351,353,356,358,362],{"class":81,"line":82},[79,338,339],{"class":85},"var",[79,341,342],{"class":92}," crepes",[79,344,345],{"class":85}," =",[79,347,348],{"class":85}," new",[79,350,164],{"class":92},[79,352,167],{"class":99},[79,354,355],{"class":243},"\"Crêpes\"",[79,357,175],{"class":99},[79,359,361],{"class":360},"s5iOY","30",[79,363,364],{"class":99},");\n",[79,366,367],{"class":81,"line":96},[79,368,155],{"emptyLinePlaceholder":154},[79,370,371,374,377],{"class":81,"line":103},[79,372,373],{"class":99},"Console.",[79,375,376],{"class":163},"WriteLine",[79,378,379],{"class":99},"(crepes.Nom);\n",[79,381,382,384,386,389,391],{"class":81,"line":130},[79,383,373],{"class":99},[79,385,376],{"class":163},[79,387,388],{"class":99},"(crepes.",[79,390,310],{"class":163},[79,392,393],{"class":99},"());\n",[79,395,396],{"class":81,"line":151},[79,397,155],{"emptyLinePlaceholder":154},[79,399,400,403,405,408],{"class":81,"line":158},[79,401,402],{"class":99},"crepes.Minutes ",[79,404,199],{"class":85},[79,406,407],{"class":360}," 25",[79,409,269],{"class":99},[41,411,412,413,416,417,420],{},"L'écriture ",[25,414,415],{},"objet.Membre"," accède à une propriété ou à une méthode. Chaque objet garde ses propres valeurs : modifier ",[25,418,419],{},"crepes"," ne change pas une autre recette.",[422,423,424],"note",{},[41,425,426,427,429,430,432],{},"Dans un projet avec instructions de niveau supérieur, mets la classe dans son propre fichier (",[25,428,73],{},") ou après le code de ",[25,431,332],{},". Un fichier par classe reste plus simple à relire.",[10,434,436],{"id":435},"protéger-les-données","Protéger les données",[41,438,439,440,443],{},"Rien n'empêche aujourd'hui d'écrire ",[25,441,442],{},"crepes.Minutes = -5",". Pour contrôler une valeur, tu peux limiter son écriture.",[69,445,447],{"className":71,"code":446,"filename":73,"language":74,"meta":75,"style":75},"public class Recette\n{\n    public string Nom { get; }\n    public int Minutes { get; private set; }\n\n    public Recette(string nom, int minutes)\n    {\n        Nom = nom;\n        Minutes = minutes;\n    }\n\n    public void Rallonger(int minutes)\n    {\n        if (minutes > 0) Minutes += minutes;\n    }\n}\n",[25,448,449,457,461,475,496,500,520,524,532,540,544,548,566,570,593,598],{"__ignoreMap":75},[79,450,451,453,455],{"class":81,"line":82},[79,452,86],{"class":85},[79,454,89],{"class":85},[79,456,93],{"class":92},[79,458,459],{"class":81,"line":96},[79,460,100],{"class":99},[79,462,463,465,467,469,471,473],{"class":81,"line":103},[79,464,106],{"class":85},[79,466,109],{"class":85},[79,468,112],{"class":92},[79,470,115],{"class":99},[79,472,118],{"class":85},[79,474,127],{"class":99},[79,476,477,479,481,483,485,487,489,491,494],{"class":81,"line":130},[79,478,106],{"class":85},[79,480,135],{"class":85},[79,482,138],{"class":92},[79,484,115],{"class":99},[79,486,118],{"class":85},[79,488,121],{"class":99},[79,490,27],{"class":85},[79,492,493],{"class":85}," set",[79,495,127],{"class":99},[79,497,498],{"class":81,"line":151},[79,499,155],{"emptyLinePlaceholder":154},[79,501,502,504,506,508,510,512,514,516,518],{"class":81,"line":158},[79,503,106],{"class":85},[79,505,164],{"class":163},[79,507,167],{"class":99},[79,509,46],{"class":85},[79,511,172],{"class":92},[79,513,175],{"class":99},[79,515,178],{"class":85},[79,517,181],{"class":92},[79,519,184],{"class":99},[79,521,522],{"class":81,"line":187},[79,523,190],{"class":99},[79,525,526,528,530],{"class":81,"line":193},[79,527,196],{"class":99},[79,529,199],{"class":85},[79,531,202],{"class":99},[79,533,534,536,538],{"class":81,"line":205},[79,535,208],{"class":99},[79,537,199],{"class":85},[79,539,213],{"class":99},[79,541,542],{"class":81,"line":216},[79,543,219],{"class":99},[79,545,546],{"class":81,"line":222},[79,547,155],{"emptyLinePlaceholder":154},[79,549,550,552,555,558,560,562,564],{"class":81,"line":227},[79,551,106],{"class":85},[79,553,554],{"class":85}," void",[79,556,557],{"class":163}," Rallonger",[79,559,167],{"class":99},[79,561,178],{"class":85},[79,563,181],{"class":92},[79,565,184],{"class":99},[79,567,568],{"class":81,"line":272},[79,569,190],{"class":99},[79,571,573,576,579,582,585,588,591],{"class":81,"line":572},14,[79,574,575],{"class":85},"        if",[79,577,578],{"class":99}," (minutes ",[79,580,581],{"class":85},">",[79,583,584],{"class":360}," 0",[79,586,587],{"class":99},") Minutes ",[79,589,590],{"class":85},"+=",[79,592,213],{"class":99},[79,594,596],{"class":81,"line":595},15,[79,597,219],{"class":99},[79,599,601],{"class":81,"line":600},16,[79,602,275],{"class":99},[15,604,605,614],{},[18,606,607,610,611,613],{},[25,608,609],{},"Nom { get; }"," n'a pas de ",[25,612,124],{}," : elle se fixe dans le constructeur puis ne change plus.",[18,615,616,619],{},[25,617,618],{},"private set"," autorise la modification seulement à l'intérieur de la classe.",[41,621,622,623,626,627,28],{},"Le reste du programme passe désormais par ",[25,624,625],{},"Rallonger",", qui vérifie la valeur. On appelle cette idée l'",[49,628,629],{},"encapsulation",[631,632,633,646],"table",{},[634,635,636],"thead",{},[637,638,639,643],"tr",{},[640,641,642],"th",{},"Niveau d'accès",[640,644,645],{},"Qui peut utiliser le membre",[647,648,649,659,668],"tbody",{},[637,650,651,656],{},[652,653,654],"td",{},[25,655,86],{},[652,657,658],{},"Tout le programme",[637,660,661,665],{},[652,662,663],{},[25,664,27],{},[652,666,667],{},"La classe elle-même",[637,669,670,675],{},[652,671,672],{},[25,673,674],{},"protected",[652,676,677],{},"La classe et ses classes filles (voir le chapitre suivant)",[10,679,681],{"id":680},"les-records","Les records",[41,683,684,685,687],{},"Beaucoup de classes ne servent qu'à porter des données. Un ",[49,686,34],{}," est fait pour cela : en une ligne, tu obtiens les propriétés, le constructeur et d'autres comportements utiles.",[69,689,691],{"className":71,"code":690,"language":74,"meta":75,"style":75},"public record Ingredient(string Nom, int Quantite);\n\nvar farine = new Ingredient(\"farine\", 250);\nConsole.WriteLine(farine);   \u002F\u002F Ingredient { Nom = farine, Quantite = 250 }\n",[25,692,693,718,722,747],{"__ignoreMap":75},[79,694,695,697,700,703,705,707,709,711,713,716],{"class":81,"line":82},[79,696,86],{"class":85},[79,698,699],{"class":85}," record",[79,701,702],{"class":92}," Ingredient",[79,704,167],{"class":99},[79,706,46],{"class":85},[79,708,112],{"class":92},[79,710,175],{"class":99},[79,712,178],{"class":85},[79,714,715],{"class":92}," Quantite",[79,717,364],{"class":99},[79,719,720],{"class":81,"line":96},[79,721,155],{"emptyLinePlaceholder":154},[79,723,724,726,729,731,733,735,737,740,742,745],{"class":81,"line":103},[79,725,339],{"class":85},[79,727,728],{"class":92}," farine",[79,730,345],{"class":85},[79,732,348],{"class":85},[79,734,702],{"class":92},[79,736,167],{"class":99},[79,738,739],{"class":243},"\"farine\"",[79,741,175],{"class":99},[79,743,744],{"class":360},"250",[79,746,364],{"class":99},[79,748,749,751,753,756],{"class":81,"line":130},[79,750,373],{"class":99},[79,752,376],{"class":163},[79,754,755],{"class":99},"(farine);   ",[79,757,759],{"class":758},"sd6ml","\u002F\u002F Ingredient { Nom = farine, Quantite = 250 }\n",[41,761,762],{},"La liste entre parenthèses déclare des propriétés en lecture seule, remplies à la création. L'affichage d'un record est déjà lisible, sans code de plus.",[10,764,766],{"id":765},"égalité-par-valeur-et-with","Égalité par valeur et with",[41,768,769],{},"Deux objets d'une classe ordinaire sont égaux seulement s'ils sont le même objet. Deux records sont égaux quand leur contenu est identique :",[69,771,773],{"className":71,"code":772,"language":74,"meta":75,"style":75},"var a = new Ingredient(\"farine\", 250);\nvar b = new Ingredient(\"farine\", 250);\n\nConsole.WriteLine(a == b);   \u002F\u002F True\n",[25,774,775,798,821,825],{"__ignoreMap":75},[79,776,777,779,782,784,786,788,790,792,794,796],{"class":81,"line":82},[79,778,339],{"class":85},[79,780,781],{"class":92}," a",[79,783,345],{"class":85},[79,785,348],{"class":85},[79,787,702],{"class":92},[79,789,167],{"class":99},[79,791,739],{"class":243},[79,793,175],{"class":99},[79,795,744],{"class":360},[79,797,364],{"class":99},[79,799,800,802,805,807,809,811,813,815,817,819],{"class":81,"line":96},[79,801,339],{"class":85},[79,803,804],{"class":92}," b",[79,806,345],{"class":85},[79,808,348],{"class":85},[79,810,702],{"class":92},[79,812,167],{"class":99},[79,814,739],{"class":243},[79,816,175],{"class":99},[79,818,744],{"class":360},[79,820,364],{"class":99},[79,822,823],{"class":81,"line":103},[79,824,155],{"emptyLinePlaceholder":154},[79,826,827,829,831,834,837,840],{"class":81,"line":130},[79,828,373],{"class":99},[79,830,376],{"class":163},[79,832,833],{"class":99},"(a ",[79,835,836],{"class":85},"==",[79,838,839],{"class":99}," b);   ",[79,841,842],{"class":758},"\u002F\u002F True\n",[41,844,845,846,849],{},"Un record ne se modifie pas. Pour obtenir une copie avec un changement, utilise ",[25,847,848],{},"with"," :",[69,851,853],{"className":71,"code":852,"language":74,"meta":75,"style":75},"var plusDeFarine = a with { Quantite = 500 };\nConsole.WriteLine(plusDeFarine);   \u002F\u002F Ingredient { Nom = farine, Quantite = 500 }\n",[25,854,855,880],{"__ignoreMap":75},[79,856,857,859,862,864,867,869,872,874,877],{"class":81,"line":82},[79,858,339],{"class":85},[79,860,861],{"class":92}," plusDeFarine",[79,863,345],{"class":85},[79,865,866],{"class":99}," a ",[79,868,848],{"class":85},[79,870,871],{"class":99}," { Quantite ",[79,873,199],{"class":85},[79,875,876],{"class":360}," 500",[79,878,879],{"class":99}," };\n",[79,881,882,884,886,889],{"class":81,"line":96},[79,883,373],{"class":99},[79,885,376],{"class":163},[79,887,888],{"class":99},"(plusDeFarine);   ",[79,890,891],{"class":758},"\u002F\u002F Ingredient { Nom = farine, Quantite = 500 }\n",[41,893,894,895,898],{},"L'objet ",[25,896,897],{},"a"," reste inchangé. Cette copie contrôlée évite des modifications par accident.",[10,900,902],{"id":901},"classe-ou-record","Classe ou record",[631,904,905,915],{},[634,906,907],{},[637,908,909,912],{},[640,910,911],{},"Besoin",[640,913,914],{},"Choix",[647,916,917,927],{},[637,918,919,922],{},[652,920,921],{},"Un objet qui change au fil du programme, avec des règles",[652,923,924],{},[25,925,926],{},"class",[637,928,929,932],{},[652,930,931],{},"Une donnée simple, comparée par son contenu",[652,933,934],{},[25,935,34],{},[937,938,939],"tip",{},[41,940,941,942,944,945,947],{},"Par défaut, pars sur un ",[25,943,34],{}," pour tout ce qui décrit une donnée (un ingrédient, un prix, un résultat) et sur une ",[25,946,926],{}," pour ce qui a un comportement et un état qui évolue (un panier de courses).",[10,949,951],{"id":950},"à-retenir","À retenir",[15,953,954,960,974,982,987],{},[18,955,956,957,959],{},"Une classe est un plan ; ",[25,958,327],{}," en crée un objet en appelant son constructeur.",[18,961,962,963,290,965,967,968,970,971,973],{},"Une propriété expose une donnée avec ",[25,964,118],{},[25,966,124],{}," ; ",[25,969,618],{}," ou l'absence de ",[25,972,124],{}," la protège.",[18,975,976,978,979,981],{},[25,977,86],{}," ouvre un membre à tout le programme, ",[25,980,27],{}," le réserve à la classe.",[18,983,300,984,986],{},[25,985,34],{}," déclare des données en une ligne, s'affiche lisiblement et se compare par son contenu.",[18,988,989,991],{},[25,990,848],{}," fabrique une copie d'un record avec une valeur changée.",[993,994,995],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}",{"title":75,"searchDepth":96,"depth":103,"links":997},[998,999,1000,1001,1002,1003,1004,1005,1006],{"id":12,"depth":96,"text":13},{"id":38,"depth":96,"text":39},{"id":66,"depth":96,"text":67},{"id":320,"depth":96,"text":321},{"id":435,"depth":96,"text":436},{"id":680,"depth":96,"text":681},{"id":765,"depth":96,"text":766},{"id":901,"depth":96,"text":902},{"id":950,"depth":96,"text":951},"Modéliser une recette avec une classe, ses propriétés et son constructeur, puis découvrir les records pour des données simples comparables par valeur.","md",{},[51,58,1011,303,327,27,34,848,1012,1013],"propriété","égalité par valeur","ToString","intermediaire","\u002Fcsharp\u002Fclasses-proprietes-records",[1017],"\u002Fcsharp\u002Fcollections-et-exceptions",[1019,1023,1027],{"nom":1020,"url":1021,"type":1022},"Parcours Microsoft Learn, Débuter avec C#","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Ftraining\u002Fpaths\u002Fget-started-c-sharp-part-1\u002F","cours",{"nom":1024,"url":1025,"type":1026},"Types record (Microsoft)","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Fdotnet\u002Fcsharp\u002Flanguage-reference\u002Fbuiltin-types\u002Frecord","doc",{"nom":1028,"url":1029,"type":1030},"Tutoriels interactifs C# (Microsoft)","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Fdotnet\u002Fcsharp\u002Ftour-of-csharp\u002Ftutorials\u002F","exercice",{"title":5,"description":1007},[1033,1036,1038],{"nom":1034,"url":1035},"Classes en C#","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Fdotnet\u002Fcsharp\u002Ffundamentals\u002Ftypes\u002Fclasses",{"nom":1037,"url":1025},"Types record",{"nom":1039,"url":1040},"Documentation C#","https:\u002F\u002Flearn.microsoft.com\u002Ffr-fr\u002Fdotnet\u002Fcsharp\u002F","csharp\u002F04.classes-proprietes-records","dLR0VgD5lC0wgSK2Nso0MaIOIkOSMUGIbhtFkXUfWKE",[1044,1048,1052,1055,1056,1060,1064],{"path":1045,"title":1046,"stem":1047},"\u002Fcsharp\u002Fpremier-programme","Premier programme C#","csharp\u002F01.premier-programme",{"path":1049,"title":1050,"stem":1051},"\u002Fcsharp\u002Fconditions-boucles-methodes","Conditions, boucles et méthodes","csharp\u002F02.conditions-boucles-methodes",{"path":1017,"title":1053,"stem":1054},"Collections et exceptions","csharp\u002F03.collections-et-exceptions",{"path":1015,"title":5,"stem":1041},{"path":1057,"title":1058,"stem":1059},"\u002Fcsharp\u002Fheritage-et-interfaces","Héritage et interfaces","csharp\u002F05.heritage-et-interfaces",{"path":1061,"title":1062,"stem":1063},"\u002Fcsharp\u002Flinq-et-async","LINQ et async\u002Fawait","csharp\u002F06.linq-et-async",{"path":1065,"title":1066,"stem":1067},"\u002Fcsharp","C#","csharp\u002Findex",[1069,1071],{"title":1053,"path":1017,"stem":1054,"description":1070,"children":-1},"Stocker plusieurs valeurs avec List et Dictionary, puis gérer les erreurs d'exécution avec try, catch et finally.",{"title":1058,"path":1057,"stem":1059,"description":1072,"children":-1},"Réutiliser du code avec l'héritage, redéfinir un comportement avec virtual et override, et décrire un contrat commun avec une interface.",[1074],{"path":1017,"title":1053,"ligne":74},[1076,1078,1079,1080,1081,1082,1084],{"path":1045,"title":1046,"niveau":1077,"stem":1047},"debutant",{"path":1049,"title":1050,"niveau":1077,"stem":1051},{"path":1017,"title":1053,"niveau":1077,"stem":1054},{"path":1015,"title":5,"niveau":1014,"stem":1041},{"path":1057,"title":1058,"niveau":1014,"stem":1059},{"path":1061,"title":1062,"niveau":1083,"stem":1063},"avance",{"path":1065,"title":1066,"niveau":1085,"stem":1067},"memo",1794583457904]