Øvelse – Returner værdier og parametre for metoder
- 18 minutter
I det forrige undermodul brugte du et kodescenarie med "rulle terninger" til at illustrere forskellen mellem statelige (instans) og tilstandsløse (statiske) metoder. Det samme scenarie kan hjælpe dig med at forstå andre vigtige begreber om kald af metoder. Eksempel:
- håndtering af returværdien for en metode.
- metodeparametre og overførsel af argumenter til en metode.
- vælge en overbelastet version af en metode.
Returner værdier
Nogle metoder er designet til at fuldføre deres funktion og ende "stille". Med andre ord returnerer de ikke en værdi, når de er færdige. De kaldes ugyldige metoder.
Andre metoder er designet til at returnere en værdi ved fuldførelse. Returværdien er typisk resultatet af en handling. En returværdi er den primære måde for en metode at kommunikere tilbage til den kode, der kalder metoden.
Du så, at metoden Random.Next()
returnerer en int
type, der indeholder værdien af det tilfældigt genererede tal. En metode kan dog designes til at returnere en hvilken som helst datatype, selv en anden klasse. Klassen har f.eks. nogle metoder, String
der returnerer en streng, nogle, der returnerer et heltal, og nogle, der returnerer en boolesk værdi.
Når du kalder en metode, der returnerer en værdi, tildeler du ofte returværdien til en variabel. På den måde kan du bruge værdien senere i din kode. I terningecenariet har du tildelt variablens Random.Next()
returværdiroll
:
int roll = dice.Next(1, 7);
I nogle tilfælde kan det være en god idé at bruge returværdien direkte uden at tildele den til en variabel. Det kan f.eks. være, at du vil udskrive returværdien til konsollen på følgende måde:
Console.WriteLine(dice.Next(1, 7));
Selvom en metode returnerer en værdi, er det muligt at kalde metoden uden at bruge returværdien. Du kan f.eks. ignorere returværdien ved at kalde metoden på følgende måde:
dice.Next(1, 7);
Det ville dog være meningsløst at ignorere returværdien. Årsagen til, at du kalder Next()
metoden, er, at du kan hente den næste tilfældige værdi.
Metodeparametre og argumenter i kaldsætningen
Når du kalder en metode, kan du angive værdier, som metoden skal bruge til at fuldføre sin opgave. Disse værdier kaldes argumenter. Metoden bruger argumenterne til at tildele værdier til de parametre , der er defineret i metodens signatur. En metode kan kræve en eller flere parametre for at udføre sin opgave eller slet ingen.
Notat
Ofte bruges udtrykkene 'parameter' og 'argument' i flæng. 'parameter' refererer dog til den variabel, der bruges i metoden. Et 'argument' er den værdi, der overføres, når metoden kaldes.
De fleste metoder er designet til at acceptere en eller flere parametre. Parametrene kan bruges til at konfigurere, hvordan metoden udfører sit arbejde, eller de kan styres direkte. Metoden bruger f.eks Random.Next()
. parametre til at konfigurere de øvre og nedre grænser for returværdien.
Console.WriteLine()
Bruger dog parameteren direkte ved at udskrive værdien i konsollen.
Metoder bruger en metodesignatur til at definere antallet af parametre, som metoden accepterer, samt datatypen for hver parameter. Den kodesætning, der kalder metoden, skal overholde de krav, der er angivet i metodesignaturen. Nogle metoder indeholder indstillinger for antallet og typen af parametre, som metoden accepterer.
Når en kalder aktiverer metoden, leverer den konkrete værdier, kaldet argumenter, for hver parameter. Argumenterne skal være kompatible med parametertypen. Hvis argumentnavnet bruges i den kaldende kode, behøver det dog ikke at være det samme som det parameternavn, der er defineret i metoden.
Overvej følgende kode:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
Den første kodelinje opretter en forekomst af klassen Random
med navnet dice
. Den anden kodelinje bruger dice.Next(1, 7)
metoden til at tildele en vilkårlig værdi til et heltal med navnet roll
. Bemærk, at kaldesætningen indeholder to argumenter adskilt af et ,
symbol. Metoden Next()
indeholder en metodesignatur, der accepterer to parametre af typen int
. Disse parametre bruges til at konfigurere de nedre og øvre grænser for det tilfældige tal, der returneres. Den endelige kodelinje bruger Console.WriteLine()
metoden til at udskrive værdien af roll
på konsollen.
De argumenter, der overføres til en metode, skal være af samme datatype som de tilsvarende parametre, der er defineret af metoden. Hvis du forsøger at overføre et forkert indtastet argument til en metode, registrerer C#-compileren din fejl og tvinger dig til at opdatere opkaldssætningen, før koden kompileres og køres. Typekontrol er en måde, som C# og .NET bruger til at forhindre slutbrugere i at opleve fejl på kørselstidspunktet.
Notat
Selvom parametre ofte bruges, kræver ikke alle metoder parametre for at fuldføre deres opgave. Klassen indeholder f.eks. en Console
metode, Console.Clear()
der ikke bruger parametre. Da denne metode bruges til at rydde alle de oplysninger, der vises i konsollen, behøver den ikke parametre for at fuldføre opgaven.
Overbelastede metoder
Mange metoder i .NET-klassebiblioteket har overbelastede metodesignaturer. Dette giver dig bl.a. mulighed for at kalde metoden med eller uden argumenter, der er angivet i opkaldssætningen.
En overbelastet metode er defineret med flere metodesignaturer. Overbelastede metoder giver forskellige måder at kalde metoden på eller levere forskellige typer data.
I nogle tilfælde bruges overbelastede versioner af en metode til at definere en parameter ved hjælp af forskellige datatyper. Metoden har f.eks Console.WriteLine()
. 19 forskellige overbelastede versioner. De fleste af disse overbelastninger gør det muligt for metoden at acceptere forskellige typer og derefter skrive de angivne oplysninger til konsollen. Overvej følgende kode:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
I dette eksempel aktiverer du tre separate overbelastede versioner af WriteLine()
metoden.
- Den første
WriteLine()
metode bruger en metodesignatur, der definerer enint
parameter. - Den anden
WriteLine()
metode bruger en metodesignatur, der definerer nul parametre. - Den tredje
WriteLine()
metode bruger en metodesignatur, der definerer enstring
parameter.
I andre tilfælde definerer overbelastede versioner af en metode et andet antal parametre. De alternative parametre kan bruges til at give mere kontrol over det ønskede resultat. Metoden har f.eks. overbelastede versioner, Random.Next()
der gør det muligt for dig at angive forskellige begrænsningsniveauer for det tilfældigt genererede tal.
I følgende øvelse kaldes metoden Random.Next()
for at generere tilfældige heltalsværdier med forskellige begrænsningsniveauer:
Sørg for, at du har åbnet en tom Program.cs fil i Visual Studio Code.
Hvis det er nødvendigt, skal du åbne Visual Studio Code og derefter udføre følgende trin for at forberede en Program.cs fil i Editor:
Vælg Åbn mappe i menuen Filer.
Brug dialogboksen Åbn mappe til at navigere til og derefter åbne mappen CsharpProjects .
Vælg Program.cs i visningen Visual Studio Code EXPLORER.
I menuen Visual Studio Code Selection skal du vælge Select All og derefter trykke på Delete.
Hvis du vil undersøge de overbelastede versioner af
Random.Next()
metoden, skal du angive følgende kode:Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");
Klik på Gem i menuen Filer i Visual Studio Code.
Hvis du vil åbne en Terminal på placeringen af mappen TestProject i STIFINDER-visningen, skal du højreklikke på TestProject og derefter vælge Åbn i integreret terminal.
Kontrollér, at den mappesti, der vises i kommandoprompten, peger på den mappe, der indeholder den Program.cs fil.
I kommandoprompten Terminal skal du skrive dotnet run og derefter trykke på Enter for at køre din kode.
Bemærk, at dit resultat ligner følgende output:
First roll: 342585470 Second roll: 43 Third roll: 89
De genererede tal er tilfældige, så dine resultater vil være forskellige. Dette eksempel viser dog det interval af resultater, du kan se.
Brug et øjeblik på at undersøge koden.
Den første version af
Next()
metoden angiver ikke en øvre og nedre grænse, så metoden returnerer værdier, der spænder fra0
til2,147,483,647
, som er den maksimale værdi, derint
kan gemmes.Den anden version af
Next()
metoden angiver den maksimale værdi som en øvre grænse, så i dette tilfælde kan du forvente en vilkårlig værdi mellem0
og100
.Den tredje version af
Next()
metoden angiver både minimum- og maksimumværdierne, så i dette tilfælde kan du forvente en vilkårlig værdi mellem50
og100
.Luk terminalpanelet.
Du har allerede undersøgt flere emner i dette undermodul. Her er en hurtig liste over, hvad du har gennemgået:
- Du har undersøgt, hvordan du bruger en metodes returværdi (når metoden leverer en returværdi).
- Du har undersøgt, hvordan en metode kan bruge parametre, der er defineret som bestemte datatyper.
- Du har undersøgt de overbelastede versioner af nogle metoder, der omfatter forskellige parametre eller parametertyper.
Brug IntelliSense
Visual Studio Code indeholder IntelliSense-funktioner , der er drevet af en sprogtjeneste. Tjenesten C# sprog leverer f.eks. intelligente kodefuldførelser baseret på sprogsemantik og en analyse af din kildekode. I dette afsnit skal du bruge IntelliSense til at hjælpe dig med at implementere Random.Next()
metoden.
Da IntelliSense vises i kodeeditoren, kan du lære meget om en metode uden at forlade kodemiljøet. IntelliSense giver tip og referenceoplysninger i et pop op-vindue under markørens placering, når du indtaster din kode. Når du skriver kode, ændrer pop op-vinduet IntelliSense indholdet afhængigt af konteksten.
Når du f.eks. indtaster ordet dice
langsomt, viser IntelliSense alle C#-nøgleord, id'er (eller rettere variabelnavne i koden) og klasser i .NET-klassebiblioteket, der svarer til de bogstaver, der indtastes. Autofuldførelsesfunktioner i kodeeditoren kan bruges til at afslutte med at skrive det ord, der er det bedste match i pop op-vinduet IntelliSense. Prøv det.
Sørg for, at din Program.cs fil er åben i Visual Studio Code.
Din app skal indeholde følgende kode:
Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");
Nederst i kodefilen skal du for at eksperimentere med IntelliSense langsomt angive bogstaverne
d
ogi
derefterc
.Bemærk pop op-vinduet IntelliSense, der vises, når du begynder at skrive.
Når IntelliSense vises, vises der en liste over forslag. Når du har angivet
dic
, skal id'etdice
være øverst på listen.Tryk på tabulatortasten på tastaturet.
Bemærk, at hele ordet
dice
er fuldført i editoren. Du kan bruge pil op og ned til at ændre markeringen, før du trykker på tabulatortasten.Notat
Hvis IntelliSense-vinduet forsvinder, kan det vælges ved hjælp
backspace
af tasten på tastaturet og derefter angive det sidste symbol igen for at åbne IntelliSense igen.Angiv et
.
tegn for at angive medlemsadgangsoperatoren.Bemærk, at pop op-vinduet IntelliSense vises igen, når du angiver
.
og viser en ufiltreret liste over alle de tilgængelige metoder (og andre medlemmer af klassen).Angiv N
Listen filtreres, og ordet
Next
skal være den øverste markering.Tryk på tabulatortasten for at fuldføre hele ordet automatisk.
Hvis du vil angive operatoren for aktivering af metoden, skal du angive (
Bemærk, at den afsluttende parentes automatisk tilføjes for dig.
Operatoren til aktivering af metoden er sættet af parenteser, der er placeret til højre for metodenavnet. I denne del af kaldesætningen kan du angive de argumenter, der skal overføres til metoden. Aktiveringsoperatoren for metoden er påkrævet, når metoden kaldes.
Bemærk, at pop op-vinduet IntelliSense nu viser detaljerede oplysninger om
Random.Next()
metoden.Brug et minut på at undersøge pop op-vinduet IntelliSense for
Random.Next()
metoden .Notat
Hvis pop op-vinduet IntelliSense lukkede, før du havde mulighed for at undersøge det, skal du slette aktiveringsoperatoren
()
og derefter angive ( for at få vist pop op-vinduet IntelliSense.Bemærk, at pop op-vinduet indeholder tre sektioner, én til venstre og to til højre.
I højre side kan du se
int Random.Next()
i den øverste sektion ogReturns a non-negative random integer.
i nederste sektion.int
definerer returtypen for metoden . Når denne version af metoden udføres, returnerer den med andre ord en værdi af typenint
.I venstre side af pop op-vinduet IntelliSense vises
1/3
.1/3
angiver, at du ser på den første af tre metodesignaturer forNext()
metoden. Bemærk, at denne version af metodesignaturen gør det muligt for metoden at arbejde uden parametre (ingen argumenter overføres til metoden i kaldsætningen).Bemærk, at der også er en lille pil over og under
1/3
.Tryk på pil ned på tastaturet for at undersøge den anden overbelastede version af metoden.
Bemærk, at du kan bruge pil op og ned til at navigere mellem de forskellige overbelastede versioner. Når du gør det, kan du se
1/3
,2/3
og3/3
vises i venstre side af pop op-vinduet IntelliSense og nyttige forklaringer til højre.Brug et minut på at undersøge hver af de overbelastede versioner for
Random.Next()
metoden.Den anden overbelastede version af metoden , , informerer dig om,
2/3
atNext()
metoden kan acceptere en parameterint maxValue
. Beskrivelsen fortæller dig, at ermaxValue
den eksklusive øvre grænse for det tal, som metoden skalNext()
generere. Exclusive angiver, at returnummeret vil være mindre end maxValue. Så når du angiverdice.Next(1,7);
det maksimale terningekast, vil det være 6. Bemærk, at meddelelsen nederst i sektionen er blevet opdateret til:Returns a non-negative random integer that is less than the specified maximum.
Den tredje version af metoden , , informerer dig om,
3/3
at metodenNext()
kan acceptere bådeint minValue
ogint maxValue
som parametre. Den nye parameter, ,minValue
er en nedre grænse for det tal, som metoden skalNext()
generere. Da den nedre grænse er inklusive i stedet for eksklusiv, kan returværdien være lig medminValue
. Meddelelsen nederst hedder nu:Returns a random integer that is within a specified range.
I dette tilfælde indeholder IntelliSense alle de oplysninger, du skal bruge for at vælge den relevante overbelastning, herunder en detaljeret forklaring af
maxValue
ogminValue
. Du kan dog støde på situationer, hvor du skal se dokumentationen til metoden.
Brug learn.microsoft.com til at få oplysninger om overbelastede metoder
Den anden måde at få mere at vide om overbelastede versioner af metoderne på er ved at se dokumentationen til metoden. Dokumentationen hjælper dig også med at forstå, præcis hvad hver parameter er beregnet til.
Start med at åbne din foretrukne webbrowser og søgemaskine.
Udfør en søgning efter C# Random.Next()
Søgningen skal indeholde klassenavnet og metodenavnet. Det kan også være en god idé at inkludere ordet
C#
for at sikre, at du ikke kommer til at få resultater for andre programmeringssprog ved et uheld.Vælg det øverste søgeresultat med en URL-adresse, der starter med
https://learn.microsoft.com
.Et af de øverste søgeresultater skal føre til en URL-adresse, der starter med
https://learn.microsoft.com
. I dette tilfælde skal linkets titel vises somRandom.Next Method
.Her er linket, hvis du har problemer med at finde det ved hjælp af en søgemaskine:
Åbn linket for C# Random.Next().
Scan hurtigt gennem dokumentationen.
Rul ned gennem sideindholdet for at se de forskellige kodeeksempler. Bemærk, at du kan køre eksemplerne i browservinduet.
Dokumentationen til learn.microsoft.com følger et standardformat for hver klasse og metode i .NET-klassebiblioteket.
Find sektionen med navnet Overloads nær toppen af websiden.
Bemærk, at der er tre overbelastede versioner af den viste metode. Hver overbelastede version, der er angivet, indeholder et link til en placering længere nede på siden.
Hvis du vil navigere "på siden" til en beskrivelse af den anden overbelastede version, skal du vælge Næste(Int32).
Dokumentationen til hver version af metoden omfatter:
- Kort beskrivelse af metodens funktionalitet
- Definition af metoden
- Parametre, som metoden accepterer
- Returner værdier
- Undtagelser, der kan opløftes
- Eksempler på den metode, der bruges
- Andre bemærkninger om metoden
Brug et minut på at gennemse afsnittet Parametre .
I afsnittet Parametre kan du læse, at
maxValue
parameteren er den "eksklusive øvre grænse for det tilfældige tal, der skal genereres". En eksklusiv øvre grænse betyder, at hvis du vil have tal, der ikke er større end10
, skal du angive værdien11
.Du kan også læse i næste linje: "
maxValue
skal være større end eller lig med 0." Hvad sker der, hvis du ignorerer denne sætning? Du kan se i afsnittet Undtagelser , at metoden returnerer etArgumentOutOfRangeException
, nårmaxValue
er mindre end 0.Notat
Indholdet på learn.microsoft.com er "sandhedens kilde" for .NET-klassebiblioteket. Det er vigtigt at bruge tid på at læse dokumentationen for at forstå, hvordan en given metode fungerer.
Resumé
- Metoder accepterer muligvis ingen parametre eller flere parametre, afhængigt af hvordan de er designet og implementeret. Når du overfører flere parametre, skal du adskille dem med et
,
symbol. - Metoder kan returnere en værdi, når de udfører deres opgave, eller de kan ikke returnere noget (ugyldig).
- Overbelastede metoder understøtter flere implementeringer af metoden, hver med en entydig metodesignatur (antallet af parametre og datatypen for hver parameter).
- IntelliSense kan hjælpe med at skrive kode hurtigere. Den indeholder en hurtig reference til metoder, deres returværdier, deres overbelastede versioner og typerne af deres parametre.
- learn.microsoft.com er "sandhedens kilde", når du vil lære, hvordan metoder i .NET Class Library fungerer.