Introduktion och förberedelser Denna övning riktar in sig på att skapa och anropa metoder. Vi kommer att köra alla uppgifter i samma projekt i Visual Studio om inte annat anges. Så innan du börjar med uppgifterna: skapa ett nytt Windows Forms-projekt och kalla det för MethodExercises. De grafiska elementen är underordnade den kod vi ska skriva så det är upp till dig att lägga till knappar och textrutor för att kunna se resultatet från varje uppgift. Jag rekommenderar att du fyller på med knappar allt eftersom. Skapa en metod som tar två strängparametrar, message och name, men inte returnerar några värden. Dess uppgift är att skriva ut message följt med två radbrytningar och sedan name till en textruta. Namnet på metoden ska vara Print. Testa så att utskriften funkar string text = "Jag skriver ett meddelande"; string myname = ""; Print(text, myname); Jag skriver ett meddelande. Gå till kodfilen för Form (där eventhanterarna för knapparna är) 2. Ställ dig någonstans i klassen Form där du inte är i någon eventhanterare eller annan metod: //i filen Form.cs public partial class Form : Form { //skapa metoden här private void button_click(object sender, EventArgs e) {... } } 3. Deklarera metoden med returvärdet namnet och parametrarna enligt följande Övningar - Metoder.docx EC Utbildning AB (6)
public void Print(string message, string name) 4. skriv ut strängarna till textboxen. Tänk på att du bör använda Environement.NewLine för att få ett radbyte. public void Print(string message, string name) { txtmessage.text = message + Environment.NewLine + Environment.NewLine + name; } 5. Skapa en knapp som utför koden från exemplet ovan för att se så utskriften stämmer Skapa en metod som heter AppendText. Utseendet på denna är som metoden Print ovan; två stringparametrar, message och name, samt inget returvärde. Till skillnad från föregående metod ska denna lägga till text i textrutan, alltså inte skriva över befintlig text. string text = "Jag skriver ett meddelande"; string myname = ""; AppendText(text, myname); AppendText("Mer text", myname); Jag skriver ett meddelande Mer text. I Form lägger du till följande metodsignatur (void betyder att vi inte returnerar något värde): public void AppendText(string message, string name). För att inte skriva över strängen i textrutan använder vi append-operatorn txtmessage.text +=... (Tips det går även att använda metoden txtmessage.appendtext() för att åstadkomma samma resultat). Skapa en knapp som utför koden från exemplet ovan för att se så utskriften stämmer. Prova att trycka flera gånger för att se vad som händer Övningar - Metoder.docx EC Utbildning AB 2 (6)
Gör en metod som antingen anropar metoden Print eller AppendText. Denna ska ta sammanlagt tre parametrar: två strängar, message och name samt en bool-variabel som heter append. Metoden ska inte returnera något värde. Kalla metoden AppendOrPrint. De två första parametrarna ska skickas vidare till Print eller AppendText. Den sista variabeln, append, ska användas för att bestämma vilken metod vi ska anropa. Är denna true anropas AppendText, är den false anropas Print. string text = "Jag skriver ett meddelande"; string myname = ""; AppendOrPrint("Min Text", myname, false); AppendOrPrint(text, myname, true); Min Text Jag skriver ett meddelande. Definiera metoden i Form: public void AppendOrPrint(string message, string name, bool append) 2. I metoden skapar du en if-else-sats. Om parametern append är true anropar du AppendText, annars anropas Print. Skicka vidare message och name till respektive metod för utskrift. 3. Skapa en knapp som utför koden från exemplet ovan för att se så utskriften stämmer. Prova att ändra på append-variabeln och se vad som händer Gör en metod som ska beräkna priset på en produkt efter det att en viss rabatt är avdragen. Rabatten ska anges i hundradelar (0.25 = 25 %). Metoden ska ta två parametrar, båda av typen decimal. Kalla dem oldprice och discountinrate. Den första innehåller alltså det gamla priset, Övningar - Metoder.docx EC Utbildning AB 3 (6)
den andra hur mycket ränta vi får. Metoden ska returnera det nya priset. Returvärdet är som parametrarna av typen decimal. Kalla metoden för GetNewPriceFromRate. decimal result = 0m; decimal price = 200m; decimal rate = 0.25m; //25 % discount result = GetNewPriceFromRate(price, rate); txtmessage.text = string.format("slutpris: {0:c}", result); //print as currency Slutpris: 50,00 kr. Definiera metoden i Form. Tänk på att vi måste ange returvärdets datatyp: public decimal GetNewPriceFromRate(decimal oldprice, decimal discountinrate) 2. Inuti metoden beräknar du det nya priset. Det nya priset beräknas enligt följande: decimal newprice = oldprice * (.0m - discountinrate); 3. Returnera resultatet genom att använda nyckelordet return return newprice; 4. Skapa en knapp som utför koden från exemplet ovan för att se så utskriften stämmer. Beräkna nya priset på en produkt, men i detta fallet ska vi använda heltal (alltså anger vi 25 menar vi 25 %). Precis som förra uppgiften använder vi decimal-typer för beräkning. Skicka två parameterar, oldprice samt discountinpercent, och returnera även decimal från metoden. Återanvänd den tidigare metoden du gjort, GetNewPriceFromRate, så vi inte behöver skriva liknande kod igen. Anropa alltså denna när du konverterat ner heltalet till hundradel. decimal result = 0m; decimal price = 200m; decimal percent = 25m; result = GetNewPriceFromPercent(price, percent); txtmessage.text = string.format("slutpris: {0:c}", result); //print as currency Slutpris: 50,00 kr Övningar - Metoder.docx EC Utbildning AB 4 (6)
. definiera metoden i Form: public decimal GetNewPriceFromPercent(decimal oldprice, decimal discountinpercent) 2. Beräkna om heltalet till hundradel decimal rate = discountinpercent / 00; 3. Anropa GetNewPriceFromRate med den omräknade räntetypen: decimal newprice = GetNewPriceFromRate(oldPrice, rate); 4. returnera det nya priset. Skapa en knapp som utför koden från exemplet ovan för att se så utskriften stämmer. Gör en metod som antingen anropar GetNewPriceFromPercent eller GetNewPriceFromRate beroende på hur talformatet ser ut. Metoden ska returnera resultatet från anropet av respektive metod. Metoden ska ta tre parametrar: decimal oldprice, decimal discount samt bool inpercent. Är inpercent = true ska GetNewPriceFromPercent anropas, annars GetNewPriceFromRate. decimal result = 0m; decimal price = 200m; decimal percent = 25m; //--Exercice 5 -- result = GetNewPrice(price, percent, true); txtmessage.text = string.format("slutpris: {0:c}", result); //print as currency Slutpris: 50,00 kr. definiera metoden i Form: public decimal GetNewPrice(decimal oldprice, decimal discount, bool inpercent) 2. Deklarera en variabel, result, som ska hålla resultatet från beräkningen decimal result = 0.0m;. I metoden skapar du en if-else-sats. Om parametern inpercent är true anropar du GetNewPriceFromPercent, annars anropas GetNewPriceFromRate. Skicka vidare parametrarna oldprice och discount till anropet och spara undan returvärdet från anropet till result. Exempel: result = GetNewPriceFromPercent(oldPrice, discount);. returnera det nya priset 2. Skapa en knapp som utför koden från exemplet ovan för att se så utskriften stämmer. Övningar - Metoder.docx EC Utbildning AB 5 (6)
Skapa en metod som skriver ut namnet samt priset på en produkt till textrutan. Utskriften ska göras på en rad och en radbrytning ska läggas till efter produktinformationen skrivits ut. Ingen tidigare text ska tas bort. Metoden ska ta emot två parametrar: string name namnet på produkten, decimal price produktens pris. Inget värde ska returneras. Kalla metoden för AppendProductInfoRow. string name = "Mjölk"; decimal price = 0; AppendProductInfoRow(name, price); AppendProductInfoRow("Bröd", 5.90m); Mjölk Pris: 0,00 kr Bröd Pris: 5,90 kr. Deklarera metoden i Form: void AppendProductInfoRow(string name, decimal price) 2. Inuti metoden skapar du utskriften och lägger till denna i textrutan följt av ett radbryt. Här finns många sätt att göra, ett exempel är string infotext = string.format("{0}\tpris: {:c}", name, price); txtmessage.appendtext(infotext + Environment.NewLine); 3. Skapa en knapp som utför koden från exemplet ovan för att se så utskriften stämmer.. Förslag på extrauppgifter De metoder vi har gjort kan vi använda i olika sammanhang. Några förslag på extrauppgifter är: Skriv ut en produkt med AppendProductInfoRow. Lägg sedan på en rabatt med någon av GetNewPrice-metoderna. Låt användaren mata in alla värden, inklusive rabatt-tilläggen Du sparar produkter i en samling (Dicitionary<string,decimal> exempelvis). Gör en metod som loopar igenom alla elementen i samlingen och skriv ut dessa med hjälp av AppendProductInfoRow. Övningar - Metoder.docx EC Utbildning AB 6 (6)