290 likes | 922 Views
Programmering i C#. 2. Inledande detaljer. Syntax. Satser avslutas med semikolon Raddelning saknar oftast betydelse Sats kan ersättas av block Flera satser inom klammerparenteser Variabler definieras med typ namn = initialvärde; Kommentarer med /* */ eller // eller /// /// beskrivs senare.
E N D
Programmering i C# 2. Inledande detaljer
Syntax • Satser avslutas med semikolon • Raddelning saknar oftast betydelse • Sats kan ersättas av block • Flera satser inom klammerparenteser • Variabler definieras medtyp namn = initialvärde; • Kommentarer med /* */ eller // eller /// • /// beskrivs senare Programmering i C# - Kapitel 2
2.1 IO och strängar • Utmatning till terminal med Console.WriteLine(…) • Parametern kan vara valfri typ – för de inbyggda skrivs värde, för många andra typer skrivs ledtext och värden, för övriga skrivs typnamn Console.WriteLine(”Hello World”); int x = 100; Console.WriteLine(x); Programmering i C# - Kapitel 2
Formaterad utmatning • Värden kan läggas in i ledtext • Formatparametrarna kan också innehålla koder för styrning av utmatningsformat int x = 100; double y = 123.5; Console.WriteLine(”Värdet i x är {0}, och i y {1}”,x, y); Programmering i C# - Kapitel 2
Object.ToString() • Basklassen Object har metoden ToString • Omdefinierad i åtskilliga typer för utskrift av objektets tillstånd • Klassen String har plusoperator Console.WriteLine(”Värdet i x är ” + x.ToString() +” och i y ” + y.ToString()); Programmering i C# - Kapitel 2
Strängar • Klassen String motsvarar C# string • Immutable – alla metoder returnerar nytt objekt • Innehåller teckenvektor i Unicode • Literalsträng har typen string • Syntaxfel att skapa objekt med new • anmärkningsvärt undantag Programmering i C# - Kapitel 2
Inläsning • Console.ReadLine() returnerar en string • Strängen parsas med Convert.ToXXX(s) eller med måltypens XXX.Parse(s) • XXX är måltypen, s är strängen • Parsingfel ger undantag! • Inte ens ett extra blanktecken… Programmering i C# - Kapitel 2
Exempel terminal-IO staticvoid Main() { Console.Write(”Skriv in ett heltal: ”);string s = Console.ReadLine();int left = Convert.ToInt32(s);Console.Write(”Skriv ett till ”);s = Console.ReadLine();int right = Convert.ToInt32(s);Console.WriteLine(”{0} + {1} = {2}”, left, right, left + right); } Programmering i C# - Kapitel 2
2.2 Main-metoden • Programmets startpunkt • Ingår i valfri klass • Statisk, valfri synlighet • Får finnas flera! • Kompilatorflagga anger då vilken som gäller • Ingen parameter eller en string[] • Returtyp void eller int Programmering i C# - Kapitel 2
2.3 Typomvandlingar • För inbyggda structtyper implicit i alla ofarliga riktningar • int till long, int till double, etc int var = 1000000; byte b = var; // kompileringsfel long l = var; // OK double d = var; // OK bool b = var; // ingen typomvandling till bool! Programmering i C# - Kapitel 2
Explicit typomvandling • Explicit med eller utan övervakning vid exekvering • Enligt kompilatorflagga • Med checked/unchecked byte b = (byte) var; // var är en int int var = 1000000; checked (byte b = (byte) var); // undantag genereras! Programmering i C# - Kapitel 2
Up/downcast och boxing • Basklassreferens kan referera till härlett objekt enligt OO-lagarna och CTS • Härledd referens kan aldrig tilldelas basklassobjekt • Alla typer härleds från Object • Objectreferens bör kunna tilldelas struct! • Sker med ”boxing” och föklaras senare Programmering i C# - Kapitel 2
2.4 Operatorer • Operatorer är statiska metoder som anropas med annan syntax • <operand> operator operand • Ger naturligare syntax i klientkod • Används mycket flitigt i klassbiblioteket • Uppsättningen operatorer definierat i C# • Men inte deras logik Programmering i C# - Kapitel 2
Operatorer • Aritmetiska • + - * / ++ -- % • Beräkningar på heltal och flyttal • Logiska • && || ! • Returnerar true eller false • Jämförande • < <= > >= == != • Returnerar true eller false Programmering i C# - Kapitel 2
Operatorer forts. • Bitvisa • & | ^ ~ << >> • Används typiskt med uint som bitmönster • Typhantering • () is as typeof • Typkontroll och säker typomvandling • Övriga • . = () [] new ?: Programmering i C# - Kapitel 2
Prioritet • Ordningen i anropen kan vara kritisk • Förtydliga med parenteser! int x = 5, y = 3, z = 1; int sum1 = x * y + z; // 16 int sum2 = x * (y + z); // 20 bool a = false, b = false, c = false; if (a && b == c) ... // false if ((a && b) == c) ... // true Programmering i C# - Kapitel 2
Associativitet • Alla binära operatorer utom tilldelning exekverar vänster till höger • Tilldelning sker höger till vänster Programmering i C# - Kapitel 2
2.5 Vektorer • Enbart språksyntax som förenklar och döljer användande av System.Array int[] vec = newint[100]; int[] vec = newint[5] { 1, 2, 3, 4, 5 }; vec[3] = 100; // första satsen ekvivalent med: Array vec = Array.CreateInstance(typeof(int), 100); Programmering i C# - Kapitel 2
Arraymetoder • Åtskilliga metoder i Array • Vissa statiska, andra instansmetoder vec.Length // antal element (i alla dimensioner) vec.GetLength(0) // element i första dimensionen Array.IndexOf(vec, 5) // söker första element med // värdet 5 Array.Sort(vec); // sorterar elementen Programmering i C# - Kapitel 2
Flerdimensionell vektor int[,] matrix = newint[5, 10]; for(int dim = 0; dim < matrix.GetLength(0); dim++)for(int el = 0; el < matrix.GetLength(dim); el++) Console.WriteLine(matrix[dim, el]); Programmering i C# - Kapitel 2
2.6 Uttryck och satser • Villkorsuttryck alltid av typen bool if (x < 0) { ... } elseif (x < 10) // mellan 0 och 9 { ... } elseif (x < 20) // mellan 10 och 19 { ... } else // >= 20 { ... } Programmering i C# - Kapitel 2
Switch • switch kan ersätta if-else med flera grenar switch (x) {case 1 : Console.WriteLine(”Ett”); break;case 2 : Console.WriteLine(”Två”); break;...default: Console.WriteLine(”Stort”); break; } Programmering i C# - Kapitel 2
Switch forts. switch (str) {case ”Anders” :case ”Bertil” :case ”Cecilia”: Console.WriteLine(”ABC”); break;case ”David” : Console.WriteLine(”David och ”);gotocase ”Erik”;case ”Erik” : Console.WriteLine(”Erik”); break; } Programmering i C# - Kapitel 2
While och do-while • Enklaste iteration • Villkoret först eller sist while (TestMethod(x)) { … } do { … } while (TestMethod(x)); Programmering i C# - Kapitel 2
For • Vanligt är att indexvariabel räknar varv • Kan göras med while, bättre med for • Villkoret har default värdet true for (int i = 0; i < 100; i++) { … } Programmering i C# - Kapitel 2
Foreach • Mycket enkel och säker • Endast för traversering av samlingar • Förutsätter implementation av vissa interface string[] names = { ”Anna”, ”Britta”, ”Cecilia” }; foreach (string s in names) { Console.WriteLine(s); } Programmering i C# - Kapitel 2
Break och continue • break avslutar iterationen • continue avslutar pågående varv och påbörjar nästa • Gäller närmast omslutande while, do-while, for och foreach while (true) { if (…) break; } Programmering i C# - Kapitel 2
2.7 XML-kommentarer • Kommentarer efter /// • Placeras direkt före typdeklaration eller medlem • Rekommenderade XML-taggar finns • Exempel: <remarks>…</remarks> • Verktyg kan generera dokumentation Programmering i C# - Kapitel 2
XML-kommentarer exempel • Standardbiblioteket är dokumenterat i XML /// <summary>This method changes the points location /// to the given coordinates.</summary> /// <param>xor is the new x-coordinate</param> /// <param>yor is the new y-coordinate</param> /// <returns>void</returns> publicvoid Move(int xor, int yor) { ... } Programmering i C# - Kapitel 2