Parameters - Optional paratmers - public void M (int a = 4) - Zorgt ervoor dat er in gecompileerde source code M (4) komt te staan. Verandert er iets moet deze source code gerecompiled worden - public void M (int a) en public void M () die M (int a) aanroept met default parameters zou een beter alternatief zijn - public void M (int a, int b = 4, c) - Kan aangeroepen worden door M (a: 5, c: 30) - Ref - M (ref int a) { a++; } - Aanroepen als M (ref b) - Ref keyword wordt hier meegegeven om het expliciter te maken dat er een reference gebruikt wordt - Params - M (params int[] args) - Aanroepen als - M (new[] {1,2,3}) - M (1,2,3) - M () String - IEnumerable - Immutable - Reference type - De string bevindt zich op de heap. Als die op de stack zou moeten, moet er geweten worden hoe groot de string is. Dit is bij een string variabel, dus dit is niet te doen. - Als er een string op de stack gezet zou moeten worden, wordt er een frame gereserveerd van een bepaalde grootte. Hoe groot zou dit moeten zijn? - Compiler constanten met dezelfde waarden delen dezelfde heap string - string aatjes = ""; for (int i = 0; i < 100; i++) { aatjes += a } - Deze manier zet per iteratie een nieuwe string in de heap. Eerst a, dan aa, dan aaa, dan aaaa, etc. - Dit is inefficient omdat op deze manier het geheugen vol komt te staan. - Gebruik een StringBuilder in deze loop om "a" te appenden - Dit is vanaf een + of 5 efficienter omdat de stringbuilder overhead heeft - Er moet een array in-memory aangemaakt worden - Er moet een keer weer terug gegaan worden naar String - Slechter leesbaar - Gedraacht zich niet als valuetype - Gebruik "".PadRight(40, 'a'); - Gebruik new string('a', 100); - String interpolation ($"") wordt vertaald naar string.Format(..) - Kan gebruik maken van formatters zoals C2. Dit schrijf je als $"{x:C2}" - $@ mag wel, @$ mag niet Regex - Quantifiers - n* 0 or more n - n+ 1 or more n - n? 0 or 1 n - n{2} Exactly 2 n - n{2,} 2 or more n - n{2,4} 2, 3 or 4 n - Ranges - . Any character except new line (\n) - (A|B) A or B - (...) Group - [ABC] Range (A, B or C) - [^ABC] Not A, B or C - [A-Z] Character between A and Z, upper case - [0-9] Number between 0 and 9 - [A-Z0-9] Characters between A and Z, and numbers between 0 and 9 - \n nth group/sub pattern - Anchors - ^ Start of line - $ End of line - Character Classes - \w Word (a-z, A-Z, 0-9, including _ (underscore)) - \W Non-word - \d Digit (0-9) - \D Non-digit - \s Whitespace - \S Not whitespace - \b Match at beginning or end - \B Do not match at beginning or end - \0 NUL character - \n New line - Assertions (hoef je niet te kennen) - n(?=o) Lookahead, n followed by o (not matching o) - n(?!o) Negative lookahead, n not followed by o (not matching o)