Oefening: waarden en parameters van methoden retourneren
- 18 minuten
In de vorige les hebt u een 'roll dice'-coderingsscenario gebruikt om het verschil te illustreren tussen stateful (instantie) en stateless (statische) methoden. Hetzelfde scenario kan u helpen andere belangrijke concepten over het aanroepen van methoden te begrijpen. Voorbeeld:
- de retourwaarde van een methode verwerken.
- methodeparameters en argumenten doorgeven aan een methode.
- een overbelaste versie van een methode kiezen.
Retourwaarden
Sommige methoden zijn ontworpen om de betreffende functie uit te voeren en daarna stilzwijgend te worden afgesloten. Met andere woorden, ze retourneren geen waarde wanneer ze klaar zijn. Deze methoden worden ook wel void-methoden genoemd.
Andere methoden zijn ontworpen om een waarde te retourneren na voltooiing. De retourwaarde is meestal het resultaat van een bewerking. Een retourwaarde is de primaire manier voor een methode om terug te communiceren met de code die de methode aanroept.
U hebt gezien dat de Random.Next() methode een int type retourneert dat de waarde van het willekeurig gegenereerde getal bevat. Een methode kan echter worden ontworpen om elk gegevenstype, zelfs een andere klasse, te retourneren. De String klasse heeft bijvoorbeeld een aantal methoden die een tekenreeks retourneren, sommige die een geheel getal retourneren en sommige die een Booleaanse waarde retourneren.
Wanneer u een methode aanroept die een waarde retourneert, wijst u vaak de retourwaarde toe aan een variabele. Op die manier kunt u de waarde later in uw code gebruiken. In het dobbelsteenscenario hebt u de retourwaarde van Random.Next() de roll variabele toegewezen:
int roll = dice.Next(1, 7);
In sommige gevallen wilt u de retourwaarde mogelijk rechtstreeks gebruiken zonder deze toe te wijzen aan een variabele. U kunt bijvoorbeeld de retourwaarde als volgt afdrukken naar de console:
Console.WriteLine(dice.Next(1, 7));
Hoewel een methode een waarde retourneert, is het mogelijk om de methode aan te roepen zonder de retourwaarde te gebruiken. U kunt bijvoorbeeld de retourwaarde negeren door de methode als volgt aan te roepen:
dice.Next(1, 7);
Het negeren van de retourwaarde is echter zinloos. De reden waarom u de Next() methode aanroept, is dat u de volgende willekeurige waarde kunt ophalen.
Methodeparameters en -argumenten in de aanroepinstructie
Wanneer u een methode aanroept, kunt u waarden doorgeven die door de methode worden gebruikt om de taak te voltooien. Deze waarden worden argumenten genoemd. De methode gebruikt de argumenten om waarden toe te wijzen aan de parameters die zijn gedefinieerd in de handtekening van de methode. Een methode kan een of meer parameters vereisen om de taak uit te voeren, of helemaal geen parameters.
Opmerking
Vaak worden de termen 'parameter' en 'argument' door elkaar gebruikt. Parameter verwijst echter naar de variabele die in de methode wordt gebruikt. Een argument is de waarde die wordt doorgegeven wanneer de methode wordt aangeroepen.
De meeste methoden zijn ontworpen om een of meer parameters te accepteren. De parameters kunnen worden gebruikt om te configureren hoe de methode het werk uitvoert, of ze kunnen rechtstreeks worden uitgevoerd. De Random.Next() methode gebruikt bijvoorbeeld parameters om de boven- en ondergrenzen van de retourwaarde te configureren. De Console.WriteLine() parameter wordt echter rechtstreeks gebruikt door de waarde naar de console af te drukken.
Methoden gebruiken een methodehandtekening om het aantal parameters te definiëren dat door de methode wordt geaccepteerd, evenals het gegevenstype van elke parameter. De coderingsinstructie die de methode aanroept, moet voldoen aan de vereisten die zijn opgegeven door de handtekening van de methode. Sommige methoden bieden opties voor het aantal en het type parameters dat door de methode wordt geaccepteerd.
Wanneer een aanroeper de methode aanroept, worden voor elke parameter concrete waarden, argumenten genoemd, weergegeven. De argumenten moeten compatibel zijn met het parametertype. Als er echter een argumentnaam wordt gebruikt in de aanroepende code, hoeft deze niet hetzelfde te zijn als de parameternaam die in de methode is gedefinieerd.
Houd rekening met de volgende code:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
Met de eerste coderegel maakt u een exemplaar van de klasse met de Random naam dice. De tweede coderegel gebruikt de methode om een willekeurige waarde toe te wijzen aan een geheel getal met de dice.Next(1, 7) naam roll. U ziet dat de aanroepinstructie twee argumenten bevat, gescheiden door een , symbool. De Next() methode bevat een methodehandtekening die twee parameters van het type intaccepteert. Deze parameters worden gebruikt om de onderste en bovenste grenzen te configureren voor het willekeurige getal dat wordt geretourneerd. De laatste coderegel gebruikt de Console.WriteLine() methode om de waarde van roll de console af te drukken.
De argumenten die aan een methode worden doorgegeven, moeten hetzelfde gegevenstype zijn als de bijbehorende parameters die door de methode zijn gedefinieerd. Als u probeert een onjuist getypt argument door te geven aan een methode, zal de C#-compiler uw fout onderscheppen en afdwingen dat u de aanroepinstructie bijwerkt voordat uw code wordt gecompileerd en uitgevoerd. Typecontrole is een manier waarop C# en .NET worden gebruikt om te voorkomen dat eindgebruikers tijdens runtime fouten ondervinden.
Opmerking
Hoewel parameters vaak worden gebruikt, vereisen niet alle methoden parameters om hun taak te voltooien. De Console klasse bevat bijvoorbeeld een Console.Clear() methode die geen parameters gebruikt. Omdat deze methode wordt gebruikt om alle informatie die in de console wordt weergegeven, te wissen, hebt u geen parameters nodig om de taak te voltooien.
Overbelaste methoden
Veel methoden in de .NET-klassebibliotheek hebben overbelaste-methodehandtekeningen. Dit stelt u onder andere in staat om de methode aan te roepen met of zonder argumenten die zijn opgegeven in de aanroepinstructie.
Een overbelaste methode wordt gedefinieerd met meerdere methodehandtekeningen. Overbelaste methoden bieden verschillende manieren om de methode aan te roepen of verschillende typen gegevens te bieden.
In sommige gevallen worden overbelaste versies van een methode gebruikt om een parameter te definiëren met behulp van verschillende gegevenstypen. De methode Console.WriteLine() heeft bijvoorbeeld 19 verschillende overbelaste versies. Met de meeste van deze overbelastingen kan de methode verschillende typen accepteren en vervolgens de opgegeven informatie naar de console schrijven. Houd rekening met de volgende code:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
In dit voorbeeld roept u drie verschillende overbelaste versies aan van de methode WriteLine().
- De eerste
WriteLine()methode maakt gebruik van een methodehandtekening waarmee eenintparameter wordt gedefinieerd. - De tweede
WriteLine()methode maakt gebruik van een methodehandtekening die nulparameters definieert. - De derde
WriteLine()methode maakt gebruik van een methodehandtekening waarmee eenstringparameter wordt gedefinieerd.
In andere gevallen definiëren overbelaste versies van een methode een ander aantal parameters. De alternatieve parameters kunnen worden gebruikt om meer controle te bieden over het gewenste resultaat. De Random.Next() methode bevat bijvoorbeeld overbelaste versies waarmee u verschillende beperkingsniveaus kunt instellen voor het willekeurig gegenereerde getal.
In de volgende oefening wordt de methode aangeroepen voor het Random.Next() genereren van willekeurige gehele getallen met verschillende beperkingsniveaus:
Zorg ervoor dat u een leeg Program.cs bestand hebt geopend in Visual Studio Code.
Open Zo nodig Visual Studio Code en voer vervolgens de volgende stappen uit om een Program.cs-bestand voor te bereiden in de editor:
In het menu File, selecteer Map openen.
Gebruik het dialoogvenster Map openen om naar de map CsharpProjects te navigeren en deze vervolgens te openen.
Selecteer Program.cs in de weergave Visual Studio Code EXPLORER.
Selecteer in het Selectie-menu van Visual Studio Code Selecteer Alles en druk vervolgens op de Verwijderen-toets.
Voer de volgende code in om de overbelaste versies van de
Random.Next()methode te onderzoeken: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 in het menu Visual Studio Code File op Opslaan.
Als u in de EXPLORER-weergave een Terminal wilt openen op de locatie van de map TestProject, klikt u met de rechtermuisknop op TestProject en selecteert u Openen in geïntegreerde terminal.
Zorg ervoor dat het mappad dat wordt weergegeven in de opdrachtprompt verwijst naar de map met uw Program.cs bestand.
Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.
U ziet dat uw resultaat vergelijkbaar is met de volgende uitvoer:
First roll: 342585470 Second roll: 43 Third roll: 89De gegenereerde getallen zijn willekeurig, dus uw resultaten zijn anders. In dit voorbeeld ziet u echter het bereik met resultaten dat u kunt zien.
Neem even de tijd om de code te bekijken.
Met de eerste versie van de methode
Next()wordt geen boven- en ondergrens ingesteld, dus de methode retourneert waarden tussen de0en2,147,483,647(dit is de maximale waarde die in eenintkan worden opgeslagen).De tweede versie van de
Next()methode geeft de maximumwaarde op als een bovengrens, dus in dit geval kunt u een willekeurige waarde tussen0en100.De derde versie van de
Next()methode geeft zowel de minimum- als maximumwaarden op, dus in dit geval kunt u een willekeurige waarde tussen50en100.Sluit het venster Terminal.
U hebt al verschillende onderwerpen in deze les onderzocht. Hier volgt een korte lijst met de onderwerpen die u hebt behandeld:
- U hebt onderzocht hoe u de retourwaarde van een methode gebruikt (wanneer de methode een retourwaarde levert).
- U hebt onderzocht hoe een methode parameters kan gebruiken die zijn gedefinieerd als specifieke gegevenstypen.
- U hebt de overbelaste versies van sommige methoden met verschillende parameters of parametertypen onderzocht.
IntelliSense gebruiken
Visual Studio Code bevat IntelliSense-functies die worden aangedreven door een taalservice. De C#-taalservice biedt bijvoorbeeld intelligente codevoltooiingen op basis van taalsemantiek en een analyse van uw broncode. In deze sectie gebruikt u IntelliSense om u te helpen de Random.Next() methode te implementeren.
Omdat IntelliSense beschikbaar is in de code-editor, kunt u veel leren over een methode zonder de codeomgeving te verlaten. IntelliSense biedt hints en referentie-informatie in een pop-upvenster onder de cursorlocatie terwijl u uw code invoert. Wanneer u code typt, wordt de inhoud in het pop-upvenster van IntelliSense gewijzigd, afhankelijk van de context.
Als u het woord dice bijvoorbeeld langzaam invoert, worden intelliSense alle C#-trefwoorden, id's (of in plaats daarvan variabelenamen in de code) en klassen in de .NET-klassenbibliotheek weergegeven die overeenkomen met de letters die worden ingevoerd. Functies voor automatisch aanvullen van de code-editor kunnen worden gebruikt om het woord te typen dat het meest overeenkomt met de IntelliSense-pop-up. Probeer het eens.
Zorg ervoor dat uw Program.cs-bestand is geopend in Visual Studio Code.
Uw app moet de volgende code bevatten:
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}");Onder aan het codebestand kunt u experimenteren met IntelliSense, langzaam de letters
dinvoeren enivervolgensc.U ziet het pop-upvenster van IntelliSense dat wordt weergegeven wanneer u begint te typen.
Wanneer IntelliSense wordt weergegeven, wordt er een lijst met suggesties weergegeven. Op het moment dat u hebt ingevoerd
dic, moet de iddiceboven aan de lijst staan.Druk op de Tab-toets op het toetsenbord.
U ziet dat het hele woord
diceis voltooid in de editor. U kunt de pijl-omhoog en pijl-omlaag gebruiken om de selectie te wijzigen voordat u op de Tab-toets drukt.Opmerking
Als het IntelliSense-venster verdwijnt, kunt u het selecteren met behulp van de
backspacetoets op het toetsenbord en het laatste symbool opnieuw invoeren om IntelliSense opnieuw te openen.Als u de operator voor lidtoegang wilt opgeven, voert u een
.teken in.U ziet dat de pop-up van IntelliSense opnieuw wordt weergegeven wanneer u een niet-gefilterde lijst met alle methoden (en andere leden van de klasse) invoert
.en weergeeft die beschikbaar zijn.Voer N in
De lijst wordt gefilterd en het woord
Nextmoet de bovenste selectie zijn.Als u het hele woord automatisch wilt aanvullen, drukt u op de Tab-toets.
Als u de operator voor het aanroepen van de methode wilt opgeven, voert u (
U ziet dat het haakje sluiten automatisch voor u wordt toegevoegd.
De operator voor het aanroepen van de methode is de set haakjes rechts van de naam van de methode. In dit gedeelte van de aanroepinstructie geeft u de argumenten op die worden doorgegeven aan de methode. De operator voor het aanroepen van de methode is vereist bij het aanroepen van de methode.
U ziet dat in de pop-up van IntelliSense nu gedetailleerde informatie over de
Random.Next()methode wordt weergegeven.Neem even de tijd om de IntelliSense-pop-up voor de
Random.Next()methode te bekijken.Opmerking
Als de intelliSense-pop-up is gesloten voordat u deze hebt bekeken, verwijdert u de aanroepoperator
()en voert u in ( om de IntelliSense-pop-up weer te geven.U ziet dat het pop-upvenster drie secties bevat, één aan de linkerkant en twee aan de rechterkant.
Aan de rechterkant ziet
int Random.Next()u in de bovenste sectie enReturns a non-negative random integer.in de onderste sectie. Hiermeeintdefinieert u het retourtype voor de methode. Met andere woorden, wanneer deze versie van de methode wordt uitgevoerd, wordt een waarde van het typeintgeretourneerd.Aan de linkerkant van de IntelliSense-pop-up wordt het weergegeven
1/3.Hiermee
1/3wordt aangegeven dat u de eerste van drie methodehandtekeningen voor deNext()methode bekijkt. U ziet dat met deze versie van de methodehandtekening de methode zonder parameters kan werken (geen argumenten die zijn doorgegeven aan de methode in de aanroepinstructie).U ziet dat er ook een kleine pijl boven en onder de
1/3.Als u de tweede overbelaste versie van de methode wilt onderzoeken, drukt u op de toets Pijl-omlaag op het toetsenbord.
U ziet dat u de pijl-omhoog en pijl-omlaag kunt gebruiken om te navigeren tussen de verschillende overbelaste versies. Wanneer u dit doet, ziet u de
1/3,2/3en3/3wordt aan de linkerkant van de IntelliSense-pop-up weergegeven en vindt u nuttige uitleg aan de rechterkant.Neem even de tijd om elk van de overbelaste versies voor de
Random.Next()methode te onderzoeken.De tweede overbelaste versie van de methode,
2/3informeert u dat deNext()methode een parameterint maxValuekan accepteren. De beschrijving geeft aan datmaxValuedit de exclusieve bovengrens is voor het getal dat u wilt genereren met deNext()methode. Exclusief geeft aan dat het retournummer kleiner is dan maxValue. Dus wanneer u het maximum aantal dobbelstenen opgeeftdice.Next(1,7);, is 6. U ziet dat het bericht onderaan de sectie is bijgewerkt naar:Returns a non-negative random integer that is less than the specified maximum.De derde versie van de methode,
3/3informeert u dat deNext()methode zowelint minValuealsint maxValueals parameters kan accepteren. De nieuwe parameter,minValueis een ondergrens voor het getal dat u wilt genereren door deNext()methode. Omdat de ondergrens inclusief is in plaats van exclusief, kan de retourwaarde gelijk zijn aanminValue. Het bericht onderaan geeft nu aan:Returns a random integer that is within a specified range.In dit geval bevat IntelliSense alle informatie die u nodig hebt om de juiste overbelasting te selecteren, inclusief een gedetailleerde uitleg van
maxValueenminValue. U kunt echter situaties tegenkomen waarin u de documentatie van de methode moet raadplegen.
Gebruik learn.microsoft.com voor informatie over overbelaste methoden
De tweede manier om meer te weten te komen over overbelaste versies van methoden is het raadplegen van de documentatie voor de methode. De documentatie helpt u ook precies te begrijpen waarvoor elke parameter is bedoeld.
Open eerst de webbrowser en zoekmachine van uw voorkeur.
Voer een zoekopdracht uit naar C# Random.Next()
Uw zoekopdracht moet de klassenaam en methodenaam bevatten. U kunt ook de term
C#opnemen om ervoor te zorgen dat u niet per ongeluk resultaten voor andere programmeertalen krijgt.Selecteer het bovenste zoekresultaat met een URL die begint met
https://learn.microsoft.com.Een van de belangrijkste zoekresultaten moet leiden tot een URL die begint met
https://learn.microsoft.com. In dit geval moet de titel van de koppeling worden weergegeven alsRandom.Next Method.De koppeling staat hieronder als u deze niet kunt vinden via een zoekprogramma:
Open de koppeling voor C# Random.Next().
Snel door de documentatie scannen.
Schuif omlaag door de pagina-inhoud om de verschillende codevoorbeelden te bekijken. U ziet dat u de voorbeelden in het browservenster kunt uitvoeren.
De learn.microsoft.com-documentatie volgt een standaardindeling voor elke klasse en methode in de .NET-klassebibliotheek.
Zoek boven aan de webpagina de sectie met het label Overloads.
U ziet dat er drie overbelaste versies van de vermelde methode zijn. Elke overbelaste versie die wordt vermeld, bevat een hyperlink naar een locatie verderop op de pagina.
Als u naar een beschrijving van de tweede overbelaste versie wilt navigeren, selecteert u Volgende (Int32).
Documentatie voor elke versie van de methode omvat:
- Korte beschrijving van de functionaliteit van de methode
- Definitie van methode
- Parameters die door de methode worden geaccepteerd
- Retourwaarden
- Uitzonderingen die kunnen worden gegenereerd
- Voorbeelden van de methode in gebruik
- Andere opmerkingen over de methode
Neem even de tijd om de sectie Parameters te bekijken.
In de sectie Parameters kunt u lezen dat de
maxValueparameter de exclusieve bovengrens is van het willekeurige getal dat moet worden gegenereerd. Een exclusieve bovengrens betekent dat als u getallen niet groter dan10wilt, u de waarde11moet doorgeven.U kunt ook lezen in de volgende regel: '
maxValuemoet groter zijn dan of gelijk zijn aan 0'. Wat gebeurt er als u deze verklaring negeert? U kunt in de sectie Uitzonderingen zien dat de methode eenArgumentOutOfRangeExceptionwaarde retourneert alsmaxValuedeze kleiner is dan 0.Opmerking
De inhoud op learn.microsoft.com is de 'bron van waarheid' voor de .NET-klassebibliotheek. Het is belangrijk dat u de tijd neemt om de documentatie te lezen om te begrijpen hoe een bepaalde methode werkt.
Samenvatting
- Methoden accepteren mogelijk geen parameters of meerdere parameters, afhankelijk van hoe ze zijn ontworpen en geïmplementeerd. Wanneer u meerdere parameters doorgeeft, scheidt u deze met een
,symbool. - Methoden kunnen een waarde retourneren wanneer ze hun taak voltooien, of ze retourneren mogelijk niets (ongeldig).
- Overbelaste methoden ondersteunen verschillende implementaties van de methode, elk met een unieke methodehandtekening (het aantal parameters en het gegevenstype van elke parameter).
- IntelliSense kan helpen bij het sneller schrijven van code. Het biedt een beknopt overzicht van methoden, hun retourwaarden, hun overbelaste versies en de typen parameters.
- learn.microsoft.com is de 'bron van waarheid' als u wilt leren hoe methoden in de .NET-klassenbibliotheek werken.
Uw kennis controleren
Feedback
Is deze pagina nuttig?
Nee
Need help with this topic?
Want to try using Ask Learn to clarify or guide you through this topic?