Exercițiu - Valori returnate și parametri de metode
- 18 minute
În unitatea anterioară, ați utilizat un scenariu de codificare "roll dice" pentru a ilustra diferența dintre metodele de stare (instanță) și apatridie (statice). Același scenariu vă poate ajuta să înțelegeți alte concepte importante despre metodele de apelare. De exemplu:
- gestionarea valorii returnate a unei metode.
- parametrii metodei și trecerea argumentelor la o metodă.
- alegerea unei versiuni supraîncărcate a unei metode.
Valori returnate
Unele metode sunt proiectate pentru a-și finaliza funcția și a încheia "silențios". Cu alte cuvinte, nu returnează o valoare atunci când termină. Acestea sunt denumite metode nule.
Alte metode sunt proiectate să returneze o valoare la finalizare. Valoarea returnată este de obicei rezultatul unei operațiuni. O valoare returnată este metoda primară pentru a comunica înapoi la codul care apelează metoda.
Ați văzut că Random.Next() metoda returnează un int tip care conține valoarea numărului generat aleator. Cu toate acestea, o metodă poate fi proiectată pentru a returna orice tip de date, chiar și o altă clasă. De exemplu, String clasa are unele metode care returnează un șir, unele returnează un număr întreg, iar unele returnează o valoare booleană.
Atunci când apelați o metodă care returnează o valoare, veți atribui adesea valoarea returnată unei variabile. Astfel, puteți utiliza valoarea mai târziu în cod. În scenariul de zaruri, ați atribuit valoarea Random.Next() returnată a variabilei roll :
int roll = dice.Next(1, 7);
În unele cazuri, se recomandă să utilizați direct valoarea returnată, fără a o atribui unei variabile. De exemplu, poate doriți să imprimați valoarea returnată pe consolă, după cum urmează:
Console.WriteLine(dice.Next(1, 7));
Chiar dacă o metodă returnează o valoare, este posibil să apelați metoda fără a utiliza valoarea returnată. De exemplu, puteți ignora valoarea returnată apelând metoda după cum urmează:
dice.Next(1, 7);
Cu toate acestea, ignorarea valorii returnate ar fi inutilă. Motivul pentru care apelați Next() metoda este astfel încât să puteți regăsi următoarea valoare aleatoare.
Parametrii de metodă și argumentele din instrucțiunea de apelare
Atunci când apelați o metodă, puteți transmite valorile pe care le va utiliza metoda pentru a-i finaliza activitatea. Aceste valori se numesc argumente. Metoda utilizează argumentele pentru a atribui valori parametrilor definiți în semnătura metodei. O metodă poate necesita unul sau mai mulți parametri pentru a-i îndeplini activitatea sau niciuna.
Notă
Adesea, termenii "parametru" și "argument" sunt utilizați interschimbabil. Totuși, "parametru" se referă la variabila utilizată în interiorul metodei. Un "argument" este valoarea care este transmisă atunci când se apelează metoda.
Majoritatea metodelor sunt proiectate să accepte unul sau mai mulți parametri. Parametrii pot fi utilizați pentru a configura modul în care metoda își efectuează activitatea sau pot fi acționați direct. De exemplu, Random.Next() metoda utilizează parametri pentru a configura limitele superioare și inferioare ale valorii returnate. Cu toate acestea, Console.WriteLine() utilizează parametrul direct imprimând valoarea pe consolă.
Metodele utilizează o semnătură de metodă pentru a defini numărul de parametri acceptați de metodă, precum și tipul de date al fiecărui parametru. Instrucțiunea de cod care apelează metoda trebuie să respecte cerințele specificate de semnătura metodei. Unele metode oferă opțiuni pentru numărul și tipul parametrilor acceptați de metodă.
Atunci când apelantul apelant apelează metoda, furnizează valori concrete, numite argumente, pentru fiecare parametru. Argumentele trebuie să fie compatibile cu tipul de parametru. Totuși, numele argumentului, dacă este utilizat unul în codul de apelare, nu trebuie să fie același cu numele parametrului definit în metodă.
Luați în considerare următorul cod:
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
Prima linie de cod creează o instanță a clasei Random denumite dice. A doua linie de dice.Next(1, 7) cod utilizează metoda pentru a atribui o valoare aleatoare unui întreg denumit roll. Observați că instrucțiunea de apelare furnizează două argumente separate de un , simbol. Metoda Next() include o semnătură de metodă care acceptă doi parametri de tip int. Acești parametri sunt utilizați pentru a configura limitele inferioare și superioare pentru numărul aleator returnat. Linia de cod finală utilizează Console.WriteLine() metoda pentru roll a imprima valoarea pe consolă.
Argumentele transmise unei metode trebuie să fie același tip de date ca parametrii corespunzători definiți de metodă. Dacă încercați să transmiteți un argument tastat incorect într-o metodă, compilatorul C# vă va prinde greșeala și vă va forța să actualizați declarația de apelare înainte ca codul să se compileze și să ruleze. Verificarea tipului este o modalitate prin care utilizarea C# și .NET pentru a împiedica utilizatorii finali să întâmpine erori la momentul rulării.
Notă
Deși parametrii sunt utilizați adesea, nu toate metodele necesită parametri pentru a-și finaliza activitatea. De exemplu, Console clasa include o Console.Clear() metodă care nu utilizează parametri. Deoarece această metodă este utilizată pentru a șterge toate informațiile afișate în consolă, nu are nevoie de parametri pentru a-și finaliza activitatea.
Metode supraîncărcate
Multe metode din Biblioteca de clase .NET au supraîncărcat semnăturile de metodă. Printre altele, acest lucru vă permite să apelați metoda cu sau fără argumente specificate în instrucțiunea de apelare.
O metodă supraîncărcată este definită cu semnături multiple de metodă. Metodele supraîncărcate furnizează modalități diferite de a apela metoda sau de a furniza tipuri diferite de date.
În unele cazuri, versiunile supraîncărcate ale unei metode sunt utilizate pentru a defini un parametru care utilizează tipuri de date diferite. De exemplu, Console.WriteLine() metoda are 19 versiuni diferite supraîncărcate. Majoritatea acestor supraîncărcări permit metodei de a accepta tipuri diferite, apoi de a scrie informațiile specificate pe consolă. Luați în considerare următorul cod:
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
În acest exemplu, invocați trei versiuni separate supraîncărcate ale metodei WriteLine() .
- Prima
WriteLine()metodă utilizează o semnătură de metodă care definește unintparametru. - A doua
WriteLine()metodă utilizează o semnătură de metodă care definește parametrii zero. - A treia
WriteLine()metodă utilizează o semnătură de metodă care definește unstringparametru.
În alte cazuri, versiunile supraîncărcate ale unei metode definesc un număr diferit de parametri. Parametrii alternativi pot fi utilizați pentru a oferi mai mult control asupra rezultatului dorit. De exemplu, Random.Next() metoda a supraîncărcat versiuni care vă permit să setați diverse niveluri de constrângere asupra numărului generat aleator.
Următorul exercițiu apelează Random.Next() metoda pentru a genera valori întregi aleatoare cu niveluri diferite de constrângere:
Asigurați-vă că aveți un fișier Program.cs gol deschis în Visual Studio Code.
Dacă este necesar, deschideți Visual Studio Code, apoi parcurgeți pașii următori pentru a pregăti un fișier Program.cs în Editor:
În meniul Fișier , selectați Deschidere folder.
Utilizați caseta de dialog Deschidere folder pentru a naviga la, apoi deschideți folderul CsharpProjects .
În vizualizarea Visual Studio Code EXPLORER, selectați Program.cs.
În meniul Selectare cod Visual Studio, selectați Selectare totală, apoi apăsați tasta Delete.
Pentru a examina versiunile supraîncărcate ale metodei
Random.Next(), introduceți următorul cod: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}");În meniul Fișier cod Visual Studio, faceți clic pe Salvare.
În vizualizarea EXPLORER, pentru a deschide un Terminal la locația folderului TestProject, faceți clic dreapta pe TestProject, apoi selectați Deschidere în Terminal integrat.
Asigurați-vă că calea folderului afișată în linia de comandă indică spre folderul care conține fișierul Program.cs.
În linia de comandă Terminal, pentru a rula codul, tastați run dotnet apoi apăsați pe Enter.
Observați că rezultatul dvs. este similar cu următorul rezultat:
First roll: 342585470 Second roll: 43 Third roll: 89Numerele generate sunt aleatoare, deci rezultatele dvs. vor fi diferite. Totuși, acest exemplu demonstrează intervalul de rezultate pe care este posibil să le vedeți.
Luați un minut pentru a examina codul.
Prima versiune a metodei
Next()nu setează o limită superioară și inferioară, astfel că metoda va returna valori de la la0la2,147,483,647, care este valoarea maximă pe care o poate stoca unintdepozit.A doua versiune a metodei
Next()specifică valoarea maximă ca limită superioară, astfel încât, în acest caz, vă puteți aștepta la o valoare aleatoare între0și100.A treia versiune a metodei
Next()specifică atât valorile minime, cât și maxime, astfel încât, în acest caz, vă puteți aștepta la o valoare aleatoare între50și100.Închideți panoul Terminal.
Ați examinat deja mai multe subiecte în această unitate. Iată o listă rapidă cu ceea ce ați acoperit:
- Ați examinat cum să utilizați valoarea returnată a unei metode (când metoda furnizează o valoare returnată).
- Ați examinat modul în care o metodă poate utiliza parametrii definiți ca tipuri de date specifice.
- Ați examinat versiunile supraîncărcate ale unor metode care includ parametri sau tipuri diferite de parametri.
Utilizarea IntelliSense
Visual Studio Code include caracteristici IntelliSense care sunt susținute de un serviciu lingvistic. De exemplu, serviciul lingvistic C# oferă completări inteligente ale codului pe baza semanticilor lingvistice și a unei analize a codului sursă. În această secțiune, veți utiliza IntelliSense pentru a Random.Next() vă ajuta să implementați metoda.
Deoarece IntelliSense este expus în editorul de cod, puteți afla multe despre o metodă fără a ieși din mediul de codificare. IntelliSense oferă indicii și informații de referință într-o fereastră popup, sub locația cursorului, pe măsură ce introduceți codul. Atunci când tastați cod, fereastra popup IntelliSense îi va modifica conținutul în funcție de context.
De exemplu, pe măsură ce introduceți cuvântul dice încet, IntelliSense va afișa toate cuvintele cheie C#, identificatorii (sau, mai degrabă, numele variabilelor din cod) și clasele din Biblioteca de clase .NET care se potrivesc cu literele introduse. Caracteristicile de completare automată ale editorului de cod pot fi utilizate pentru a termina de tastat cuvântul care este cea mai mare potrivire din fereastra pop-up IntelliSense. Încercați.
Asigurați-vă că aveți fișierul Program.cs deschis în Visual Studio Code.
Aplicația dvs. ar trebui să conțină următorul cod:
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}");În partea de jos a fișierului de cod, pentru a experimenta cu IntelliSense, introduceți încet literele
d,iapoic.Observați fereastra popup IntelliSense care apare atunci când începeți să tastați.
Atunci când apare IntelliSense, ar trebui să apară o listă de sugestii. Până când ați introdus
dic, identificatoruldicear trebui să se afle în partea de sus a listei.Apăsați tasta Tab de pe tastatură.
Observați că întregul cuvânt
diceeste finalizat în editor. Puteți utiliza tastele săgeată în sus și în jos pentru a modifica selecția înainte de a apăsa tasta Tab.Notă
Dacă fereastra IntelliSense dispare, aceasta poate fi selectată utilizând
backspacetasta de pe tastatură, apoi introduceți din nou ultimul simbol pentru a deschide din nou IntelliSense.Pentru a specifica operatorul de acces membru, introduceți un
.caracter.Observați că fereastra popup IntelliSense reapare atunci când introduceți
.și afișează o listă nefiltrată cu toate metodele (și alți membri ai clasei) care sunt disponibile.Introduceți N
Lista va fi filtrată, iar cuvântul
Nextar trebui să fie selecția de sus.Pentru a completa automat întregul cuvânt, apăsați tasta Tab.
Pentru a specifica operatorul de invocare a metodei, introduceți (
Observați că paranteza de închidere este adăugată automat pentru dvs.
Operatorul de invocare a metodei este setul de paranteze aflate în partea dreaptă a numelui metodei. Această parte a instrucțiunii de apelare este locul unde specificați argumentele care vor fi transmise metodei. Operatorul de invocare a metodei este necesar atunci când apelați metoda.
Observați că fereastra pop-up IntelliSense afișează acum informații detaliate despre
Random.Next()metodă.Așteptați un minut pentru a examina fereastra pop-up IntelliSense pentru
Random.Next()metodă.Notă
Dacă fereastra pop-up IntelliSense s-a închis înainte de a avea ocazia să o examinați, ștergeți operatorul
()de invocare , apoi introduceți ( pentru a afișa fereastra pop-up IntelliSense.Observați că fereastra pop-up include trei secțiuni, una la stânga și două la dreapta.
În partea dreaptă, ar trebui să vedeți
int Random.Next()în secțiunea de sus șiReturns a non-negative random integer.în secțiunea de jos. Defineșteinttipul de returnare pentru metodă. Cu alte cuvinte, atunci când se execută această versiune a metodei, va returna o valoare de tipint.În partea stângă a ferestrei pop-up IntelliSense, se afișează
1/3.Indică
1/3faptul că vă uitați la primele trei semnături de metodă pentruNext()metodă. Observați că această versiune a semnăturii metodei permite metodei să funcționeze fără parametri (niciun argument transmis metodei în instrucțiunea de apelare).Observați că există, de asemenea, o săgeată mică deasupra și sub
1/3.Pentru a examina a doua versiune supraîncărcată a metodei, apăsați tasta săgeată în jos de pe tastatură.
Observați că puteți utiliza tastele săgeată în sus și în jos pentru a naviga între diferitele versiuni supraîncărcate. Atunci când faceți acest lucru, veți vedea
1/32/3fereastra pop-up , și3/3veți apărea în partea stângă a ferestrei pop-up IntelliSense și explicații utile din partea dreaptă.Examinați fiecare dintre versiunile supraîncărcate pentru
Random.Next()metodă.A doua versiune supraîncărcată a metodei ,
2/3vă informează căNext()metoda poate accepta un parametruint maxValue. Descrierea vă spune cămaxValueeste limita superioară exclusivă pentru numărul pe care doriți săNext()îl genereze metoda. Exclusiv indică faptul că numărul returnat va fi mai mic decât maxValue. Deci, atunci când specificațidice.Next(1,7);numărul maxim de zaruri va fi 6. Observați că mesajul din partea de jos a secțiunii a fost actualizat la:Returns a non-negative random integer that is less than the specified maximum.A treia versiune a metodei,
3/3, vă informează căNext()metoda poate accepta atâtint minValueca parametri, cât șiint maxValueca parametri. Noul parametru,minValue, este o limită inferioară pentru numărul pe care doriți să-lNext()genereze metoda. Deoarece limita inferioară este inclusivă, nu exclusivă, valoarea returnată poate fi egală cuminValue. Mesajul din partea de jos arată acum:Returns a random integer that is within a specified range.În acest caz, IntelliSense oferă toate informațiile de care aveți nevoie pentru a selecta supraîncărcarea corespunzătoare, inclusiv o explicație detaliată a
maxValueșiminValue. Totuși, este posibil să întâmpinați situații în care trebuie să consultați documentația metodei.
Utilizarea learn.microsoft.com pentru informații despre metodele supraîncărcate
A doua modalitate de a afla despre versiunile supraîncărcate ale metodelor este să consultați documentația pentru metodă. Documentația vă va ajuta, de asemenea, să înțelegeți exact la ce este destinat fiecare parametru.
Pentru a începe, deschideți browserul web preferat și motorul de căutare.
Efectuați o căutare pentru C# Random.Next()
Căutarea ar trebui să includă numele clasei și numele metodei. De asemenea, se recomandă să includeți termenul
C#pentru a nu obține din greșeală rezultate pentru alte limbi de programare.Selectați primul rezultat al căutării cu un URL care începe cu
https://learn.microsoft.com.Unul dintre principalele rezultate ale căutării ar trebui să conducă la un URL care începe cu
https://learn.microsoft.com. În acest caz, titlul linkului ar trebui să apară caRandom.Next Method.Iată linkul în cazul în care aveți o problemă la găsirea acestuia utilizând un motor de căutare:
Deschideți linkul pentru C# Random.Next().
Parcurgeți rapid documentația.
Defilați în jos prin conținutul paginii pentru a vedea diferitele eșantioane de cod. Observați că puteți rula eșantioanele în fereastra browserului.
Documentația learn.microsoft.com urmează un format standard pentru fiecare clasă și metodă din Biblioteca de clase .NET.
Lângă partea de sus a paginii web, găsiți secțiunea etichetată Supraîncărcări.
Observați că există trei versiuni supraîncărcate ale metodei listate. Fiecare versiune supraîncărcată care este listată include un hyperlink către o locație care se află mai jos pe pagină.
Pentru a naviga "pe pagină" la o descriere a celei de-a doua versiuni supraîncărcate, selectați Următorul(Int32).
Documentația pentru fiecare versiune a metodei include:
- Scurtă descriere a funcționalității metodei
- Definiția metodei
- Parametri acceptați de metodă
- Valori returnate
- Excepții care pot fi ridicate
- Exemple de metodă utilizată
- Alte observații despre metodă
Citiți un minut pentru a revizui secțiunea Parametri .
În secțiunea Parametri , puteți citi că
maxValueparametrul este limita superioară exclusivă a numărului aleator de generat. O limită superioară exclusivă înseamnă că, dacă doriți numere mai mari decât10, trebuie să treceți în valoare11.De asemenea, puteți citi în linia următoare: "
maxValuetrebuie să fie mai mare sau egal cu 0". Ce se întâmplă dacă ignorați acest angajament? Puteți vedea în secțiunea Excepții că metoda va returna oArgumentOutOfRangeExceptioneroare atunci cândmaxValueeste mai mică decât 0.Notă
Conținutul de la learn.microsoft.com este "sursa adevărului" pentru Biblioteca de clase .NET. Este important să vă faceți timp să citiți documentația pentru a înțelege cum va funcționa o anumită metodă.
Recapitulare
- Metodele pot accepta parametri sau mai mulți parametri, în funcție de modul în care au fost proiectate și implementate. Când treceți în mai mulți parametri, separați-le cu un
,simbol. - Metodele pot returna o valoare atunci când își finalizează activitatea sau pot returna nimic (nul).
- Metodele supraîncărcate acceptă mai multe implementări ale metodei, fiecare cu o semnătură unică de metodă (numărul de parametri și tipul de date al fiecărui parametru).
- IntelliSense vă poate ajuta să scrieți mai rapid cod. Oferă o referință rapidă la metode, la valorile returnate, la versiunile lor supraîncărcate și la tipurile parametrilor lor.
- learn.microsoft.com este "sursa adevărului" atunci când doriți să aflați cum funcționează metodele din Biblioteca de clase .NET.
Verificați-vă cunoștințele
Feedback
Această pagină a fost utilă?
Nu
Aveți nevoie de ajutor cu acest subiect?
Doriți să încercați să utilizați Întrebați Microsoft Learn pentru a clarifica sau primi îndrumări privind acest subiect?