Exerciții - Apelați metodele unei clase .NET
- 12 minute
Indiferent dacă v-ați dat seama sau nu, ați apelat metode C# de la prima aplicație "Hello, World!". Această aplicație utilizează WriteLine() metoda clasei Console pentru a afișa mesajul "Salut, Lume!".
Totuși, nu toate clasele și metodele sunt implementate la fel. Această unitate acoperă unele dintre cele mai comune variante pe care va trebui să le înțelegeți atunci când utilizați metode din Biblioteca de clase .NET. Mai important, veți afla cum să găsiți și să utilizați documentația pentru a înțelege mai bine mai multe despre fiecare metodă.
Cum se apelează metodele în Biblioteca de clase .NET
Din experiența anterioară cu Console.WriteLine() metoda, ar trebui să cunoașteți deja noțiunile de bază:
- Începeți prin a tasta numele clasei. În acest caz, numele clasei este
Console. - Adăugați operatorul de acces al membrului
., simbolul. - Adăugați numele metodei. În acest caz, numele metodei este
WriteLine. - Adăugați operatorul de invocare a metodei, care este un set de paranteze
(). - În sfârșit, specificați argumentele care sunt transmise metodei, dacă există, între parantezele operatorului de invocare a metodei. În acest caz, specificați textul pe care doriți să-l scrieți în
Console.WriteLine()consolă (de exemplu,"Hello World!").
Opțional, în funcție de modul în care dezvoltatorii au proiectat și implementat metoda dată, poate fi necesar să:
- Treceți valorile suplimentare ca parametri de intrare.
- Acceptați o valoare returnată.
În următoarea unitate, veți examina cum să transmiteți valorile de intrare la o metodă și cum poate fi utilizată o metodă pentru a returna o valoare rutinei de apelare.
Deși unele metode pot fi denumite la fel cum ați apelat Console.WriteLine(), există și alte metode în Biblioteca de clase .NET care necesită o abordare diferită.
Pregătirea mediului de codificare
Acest modul include activități de codare care vă ghidează în procesul de creare și rulare a codului eșantion. Sunteți încurajat să finalizați aceste activități utilizând Visual Studio Code ca mediu de dezvoltare. Utilizarea Codului Visual Studio pentru aceste activități vă va ajuta să deveniți mai confortabil să scrieți și să rulați cod într-un mediu de dezvoltator utilizat de profesioniști din întreaga lume.
Deschideți Visual Studio Code.
Puteți utiliza meniul Start Windows (sau resursa echivalentă pentru un alt sistem de operare) pentru a deschide Visual Studio Code.
În meniul Fișier Visual Studio Code, selectați Deschidere folder.
În caseta de dialog Deschidere folder, navigați la folderul Desktop Windows.
Dacă aveți o altă locație de folder în care păstrați proiectele de cod, puteți utiliza acea locație de folder în schimb. Pentru această instruire, lucrul important este să aveți o locație ușor de găsit și de reținut.
În caseta de dialog Deschidere folder, selectați Selectare folder.
Dacă vedeți o casetă de dialog de securitate care vă întreabă dacă aveți încredere în autori, selectați Da.
În meniul Terminal Visual Studio Code, selectați Terminal nou .
Observați că o linie de comandă din panoul Terminal afișează calea folderului pentru folderul curent. De exemplu:
C:\Users\someuser\Desktop>Notă
Dacă lucrați pe propriul PC, nu într-un sandbox sau într-un mediu găzduit și ați finalizat alte module Microsoft Learn din această serie C#, este posibil să fi creat deja un folder de proiect pentru eșantioane de cod. În acest caz, puteți trece peste pasul următor, care este utilizat pentru a crea o aplicație consolă în folderul TestProject.
În linia de comandă Terminal, pentru a crea o aplicație consolă nouă într-un folder specificat, introduceți următoarea solicitare:
dotnet new console -o ./CsharpProjects/TestProjectAceastă comandă .NET CLI utilizează un șablon de program .NET pentru a crea un nou proiect de aplicație consolă C# în locația de folder specificată. Comanda creează folderele CsharpProjects și TestProject pentru dvs. și utilizează TestProject ca nume al fișierului
.csproj.Dacă se afișează un mesaj care vă spune că fișierele există deja, continuați cu pașii următori. Veți reutiliza fișierele de proiect existente.
În vizualizarea EXPLORER, extindeți folderul CsharpProjects .
Ar trebui să vedeți folderul TestProject și două fișiere, un fișier program C# denumit Program.cs și un fișier de proiect C# numit TestProject.csproj.
În meniul Fișier Visual Studio Code, selectați Deschidere folder.
În caseta de dialog Deschidere folder , selectați folderul CsharpProjects , apoi selectați Selectare folder.
În vizualizarea EXPLORER, extindeți folderul TestProject, apoi selectați Program.cs.
Ștergeți liniile de cod existente.
Veți utiliza acest proiect de consolă C# pentru a crea, a construi și a rula eșantioane de cod în timpul acestui modul.
Închideți panoul Terminal.
Apelați diferite tipuri de metode în Biblioteca de clase .NET
În Visual Studio Code Editor, pentru a crea un eșantion de cod care implementează metode de lucru
System.RandomșiSystem.Consoleclase, introduceți următorul cod:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Acest cod simulează un set de
Random.Next()zaruri utilizând metoda pentru a genera un număr șiConsole.WriteLine()metoda de afișare a valorii.Notă
Veți examina codul în detaliu mai târziu în această unitate.
Î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.
Observați că panoul Terminal include o linie de comandă care afișează o cale de folder. De exemplu:
C:\Users\someuser\Desktop\CsharpProjects\TestProject>Atunci când utilizați comenzile Terminal pentru a rula comenzile .NET CLI, comenzile rulează din locația de folder afișată. Asigurați-vă că folderul de cod se potrivește cu calea folderului afișată în linia de comandă înainte de a construi sau a rula codul.
În linia de comandă Terminal, pentru a rula codul, tastați run dotnet apoi apăsați pe Enter.
Observați că se afișează un număr între 1 și 6 în ieșirea consolei (numărul de puncte de pe zar). Dacă rulați codul de suficiente ori, veți vedea fiecare dintre numerele 1-6 afișate.
Examinați sintaxa utilizată pentru a accesa metodele
Next()șiWriteLine().Observați că utilizați tehnici diferite pentru a accesa metodele.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);În a treia linie de cod, includeți o referință la
Consoleclasă și apelațiConsole.WriteLine()metoda direct. Cu toate acestea, utilizați o altă tehnică pentru a apelaRandom.Next()metoda. Motivul pentru care utilizați două tehnici diferite este faptul că unele metode sunt "stateful", iar altele sunt "apatrid". Examinați diferența dintre metodele de stare și apatride din secțiunea următoare.
Metode de stare versus apatrid
În proiectele de dezvoltare software, starea termenului este utilizată pentru a descrie condiția mediului de execuție într-un anumit moment din timp. Pe măsură ce codul dvs. execută linia cu linie, valorile sunt stocate în variabile. În orice moment în timpul executării, starea curentă a aplicației este colecția tuturor valorilor stocate în memorie.
Unele metode nu se bazează pe starea curentă a aplicației pentru a funcționa corect. Cu alte cuvinte, metodele apatrizii sunt implementate astfel încât să poată lucra fără a face referire la valori sau a modifica valorile stocate deja în memorie. Metodele de apatrid se mai numesc și metode statice.
De exemplu, Console.WriteLine() metoda nu se bazează pe nicio valoare stocată în memorie. Acesta efectuează funcția și se termină fără a afecta starea aplicației în niciun fel.
Totuși, alte metode trebuie să aibă acces la starea aplicației pentru a funcționa corect. Cu alte cuvinte, metodele de stare sunt construite astfel încât să se bazeze pe valorile stocate în memorie de liniile anterioare de cod care au fost deja executate. Sau modifică starea aplicației actualizând valori sau stocând valori noi în memorie. Acestea sunt cunoscute și ca metode de instanță.
Metodele de stare (instanță) își urmăresc starea în câmpuri, care sunt variabile definite în clasă. Fiecare instanță nouă a clasei primește propria copie a câmpurilor respective în care să stocheze starea.
O singură clasă poate accepta atât metode de stare, cât și de apatrid. Cu toate acestea, atunci când trebuie să apelați metode statale, trebuie să creați mai întâi o instanță a clasei, astfel încât metoda să poată accesa starea.
Crearea unei instanțe a unei clase
O instanță a unei clase se numește obiect. Pentru a crea o instanță nouă a unei clase, utilizați new operatorul. Luați în considerare următoarea linie de cod care creează o instanță nouă a clasei Random pentru a crea un obiect nou denumit dice:
Random dice = new Random();
Operatorul new efectuează mai multe lucruri importante:
- Aceasta solicită mai întâi o adresă din memoria computerului suficient de mare pentru a stoca un obiect nou bazat pe
Randomclasă. - Acesta creează obiectul nou și îl stochează la adresa memoriei.
- Aceasta returnează adresa memoriei, astfel încât să poată fi salvată în
diceobiect.
Din acel moment, atunci când dice obiectul este menționat în cod, .NET Runtime efectuează o căutare în culise pentru a da iluzia că lucrați direct cu obiectul propriu-zis.
Codul utilizează dice obiectul ca o variabilă care stochează starea clasei Random . Atunci când apelați Next() metoda obiectului dice , metoda utilizează starea stocată în dice obiect pentru a genera un număr aleator.
Cea mai recentă versiune a .NET Runtime vă permite să instanțiați un obiect fără a fi necesar să repetați numele tipului (invocația constructorului tastat țintă). De exemplu, următorul cod va crea o instanță nouă a clasei Random :
Random dice = new();
Intenția este de a simplifica lizibilitatea codului. Utilizați întotdeauna paranteze atunci când scrieți o expresie tastată new țintă.
De ce este starea metodei Next() ?
Poate vă întrebați de ce Next() a fost implementată metoda ca metodă de stare? Nu au putut proiectanții bibliotecii de clase .NET să găsească o modalitate de a genera un număr aleator fără a necesita starea? Și la ce anume este stocat sau la care se face referire prin Next() metodă?
Acestea sunt întrebări corecte. La un nivel înalt, computerele sunt bune la următoarele instrucțiuni specifice pentru a crea un rezultat fiabil și repetabil. Pentru a crea iluzia aleatorie, dezvoltatorii metodei Next() au decis să captureze data și ora până la fracțiunea dintr-un milisecunde și să-l utilizeze pentru a obține un algoritm care produce un număr diferit de fiecare dată. Deși nu este complet aleator, este suficient pentru majoritatea aplicațiilor. Starea care este capturată și menținută pe durata de viață a obiectului dice este valoarea semințelor. Fiecare apel ulterior al metodei Next() rulează din nou algoritmul, dar asigură că se modifică semințele, astfel încât aceeași valoare să nu fie returnată (neapărat).
Totuși, pentru a utiliza Random.Next() metoda, nu trebuie să înțelegeți cum funcționează. Lucrul important de știut este că unele metode vă solicită să creați o instanță a unei clase înainte de a le apela, în timp ce altele nu.
Cum puteți stabili dacă trebuie să creați o instanță a unei clase înainte de a-i apela metodele?
O abordare pentru a determina dacă o metodă este statuoasă sau apatridia este de a consulta documentația. Documentația include exemple care arată dacă metoda trebuie apelat din instanța obiectului sau direct din clasă.
Notă
Poate fi necesar să defilați în jos pe pagina de documentație pentru a găsi exemplele de cod.
Ca alternativă la căutarea documentației produsului, puteți încerca să accesați metoda direct din clasa propriu-zisă. Dacă funcționează, știți că este o metodă apatridă. Cel mai rău lucru este că veți primi o eroare de compilare.
Încercați să accesați Random.Next() metoda direct și să vedeți ce se întâmplă.
Introduceți următoarea linie de cod în Visual Studio Code Editor:
int result = Random.Next();Știți deja că
Next()este o metodă statuară, însă acest exemplu demonstrează modul în care Visual Studio Code Editor reacționează atunci când încercați să accesați o metodă incorect.Observați că apare o linie roșie ondulată sub
Random.Next, indicând faptul că aveți o eroare de compilare.Dacă metoda pe care o utilizați este apatridă, nu va apărea nicio linie roșie ondulată.
Treceți cu indicatorul mouse-ului peste linia roșie ondulată.
Ar trebui să apară o fereastră pop-up cu următorul mesaj:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'După cum ați văzut în cod la începutul unității, puteți remedia această eroare creând o instanță a
Randomclasei înainte de aNext()accesa metoda. De exemplu:Random dice = new Random(); int roll = dice.Next();În acest caz,
Next()se apelează metoda fără parametri de intrare.
Recapitula
- Pentru a apela metodele unei clase din Biblioteca de clase .NET, utilizați formatul
ClassName.MethodName(), unde.simbolul este operatorul de acces membru pentru a accesa o metodă definită în clasă, iar()simbolurile sunt operatorii de invocare a metodei. - Atunci când apelați o metodă apatridă, nu trebuie să creați mai întâi o instanță nouă a clasei sale.
- Atunci când apelați o metodă statuară, trebuie să creați o instanță a clasei și să accesați metoda de pe obiect.
-
newUtilizați operatorul pentru a crea o instanță nouă a unei clase. - O instanță a unei clase se numește obiect.
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?