intrare
Acest ghid vă va dezvălui unele dintre caracteristicile .NET Core și limbajul C #. Vei face cunoștință cu următoarele aspecte:
- de lucru cu interfață linie de comandă (CLI) în .NET Core;
- Structura C # aplicație consolă;
- consola de intrare-ieșire;
- informații de bază despre API-ul, fișierul IO în .NET Core;
- Informații de bază despre modelul de programare asincron, sarcinile în .NET Core.
Acest ghid descrie un set de funcții. Să începem să le dezasambla la rândul său.
Cerințe preliminare
Crearea unei aplicații
Primul pas este de a crea o nouă cerere. Deschideți un prompt de comandă și de a crea un nou director pentru aplicație. Du-te la acest director. În linia de comandă, introduceți consola nouă DOTNET. Această comandă creează un set inițial de fișiere pentru baza de aplicare Hello World.
Înainte de a face modificări la cererea, să ne uităm la procedura de lansare. Când creați o aplicație, de tip în linia de comandă DotNet de restaurare. Acesta începe procesul de recuperare a pachetelor NuGet. NuGet reprezintă Package Manager pentru NET. Această comandă de descărcări de toate dependențele care lipsesc pentru proiect. Din moment ce avem de-a face cu un nou proiect, încă nu există dependențe pentru ea, astfel încât primul termen va fi încărcat numai platforma .NET Core. Ulterior, prima comandă de start dotnet restabili va trebui să fie difuzate numai după adăugarea de pachet nou dependente sau versiuni de actualizare dependențe utilizate. Acest proces creează, de asemenea, de blocare fișier proiect (project.lock.json) în directorul de proiect. Acest fișier vă ajută să gestionați dependențe de proiect. El indică locația locală a dependențelor de proiect. Acest fișier nu este plasat în mod necesar în sistemul de control al versiunii. Acesta va fi creat în mod automat atunci când DotNet de restaurare de comandă.
Atunci când pachete complete de recuperare, rulați DotNet construi. Această comandă pornește ansamblul subsistemului și creează un fișier executabil pentru aplicație. Puteți dotnet acum rula comanda. care va lansa aplicația.
Această afirmație spune compilatorului că sunt în domeniul de aplicare al tuturor tipurilor din spațiul de nume de sistem. Ca și în alte limbaje orientate pe obiecte, cu care puteți lucra mai devreme, C # folosește namespace pentru a organiza tipuri. În programul nostru, Hello World sunt toate exact la fel. După cum puteți vedea, programul este conținut în numele spațiu ConsoleApplication. Nu este numele foarte semnificativ, să-l schimbe la TeleprompterConsole:
fișiere de citire și de ieșire
Prima caracteristică pe care le adăugăm este de a citi date dintr-un fișier text și a afișa textul rezultat în consolă. În primul rând, trebuie să adăugați fișierul text. Copiați fișierul director de proiect sampleQuotes.txt din depozit GitHub pentru acest exemplu. Acesta va fi sursa textului pentru aplicația dumneavoastră. Pentru a descărca o aplicație de probă pentru această secțiune, vă rugăm să urmați instrucțiunile din exemple și instrucțiuni.
Acum, adăugați în clasa programului (este situat chiar în spatele metoda principală) următoarea metodă:
Această metodă folosește două noi tipuri de namespace. Pentru acest program a fost compilat cu succes, trebuie să adăugați la începutul următoarele două linii în fișierul:
interfaţă IEnumerable
Această metodă este un subtip specializat al standardului metoda C # recenzorului. Metoda returneaza o secvență enumeratorul pentru care a întârziat aplică de calcul. Aceasta înseamnă că fiecare element din secvența este generată numai în momentul în care a fost accesat în secvența de cod de prelucrare. Metodele enumeratorul conțin una sau mai multe instrucțiuni de randament întoarcere. Returnata de obiect ReadFrom cod cuprinde pentru a crea fiecare element al secvenței. În exemplul nostru, citește următoarea linie de text din fișierul sursă și returnează acest șir. De fiecare dată când apelantul solicită pentru următorul element din secvență, codul citește fișierul și returnează următoarea linie de text. Când fișierul este complet, secvența de rapoarte care nu există mai multe elemente.
Acesta utilizează două elemente C # sintaxă care pot fi noi pentru tine. Instrucțiuni care utilizează această metodă de control a elibera resursele. O variabilă care este inițializată în manualul folosind (în acest exemplu, cititor) trebuie să implementeze interfața IDisposable. Interfață IDisposable definește o singură metodă (se elimina), care a solicitat eliberarea resursei. Compilatorul creează o provocare atunci când executarea de cod ajunge bretele de închidere folosind instrucțiuni. Creat de codul compilator asigură eliberarea resursei, chiar dacă blocul de cod, utilizând o instrucțiune specifică, o excepție este aruncată.
Parțial cititor determinat cuvântul cheie var. Var de cuvinte cheie tastat definește în mod implicit variabila locală. Aceasta înseamnă că tipul unei variabile este determinată la momentul compilării în funcție de tipul de obiect atribuit acestei variabile. Aici, variabila este stocată StreamReader obiect. returnat de @ System.IO.File.OpenText.
Acum, să creeze codul în metoda principală pentru a citi fișierul:
Rulați echipa programului DotNet alerga și să se asigure că toate liniile de text sunt afișate în consolă.
Adăugarea de date de întârziere și de ieșire de formatare
Această secțiune descrie cele două acțiuni. În primul rând, să actualizeze metoda iterator pentru a returna întregul șir nu este totul, deoarece fiecare cuvânt separat. Pentru a face acest lucru, face astfel de modificări. Înlocuiți linia randament de retur manual; cu următorul cod:
Acum este necesar să se schimbe codul liniilor de procesare ale fișierului, adăugând o întârziere după încheierea fiecărui cuvânt. Înlocuiți manualul de utilizare Console.WriteLine (linia) în metoda principală pe un bloc de cod:
Clasa sarcină este în nume spațiu System.Threading.Tasks. astfel încât utilizarea acestor instrucțiuni pentru a adăuga la partea de sus a fișierului:
Acum, adăugați următorul cod după cuvântul randament declarația de retur + „“; (Înainte de bretele de închidere):
sarcini asincrone
Și ultimul pas vom adăuga acest cod care va efectua două sarcini asincrone, dintre care unul ieșiri un text, iar al doilea este în așteptare pentru intrare de la utilizator pentru a accelera sau încetini producția de text. Această etapă este împărțit în mai multe etape, la sfârșitul căreia veți primi toate actualizările necesare. Primul pas este crearea sarcinii asincron (@ System.Threading.Tasks.Task), care returnează metoda cu codul pe care l-ați creat mai devreme pentru a citi și fișierul de afișare.
Adăugați următoarea metodă în clasa programului. Acest text se bazează pe textul metodei Main:
Dar este posibil să observați două modificări. În primul rând, în text au Așteptați) apel (. care așteaptă sincronă pentru finalizarea sarcinii. În loc să-l în această versiune a cuvântului cheie așteaptă. Pentru ca aceasta să funcționeze, în semnătura metodei pe care doriți să adăugați async modificator. Această metodă returnează o sarcină. Vă rugăm să rețineți că nu există instrucțiuni pentru returnarea obiectului de sarcini. În schimb, obiectul de sarcini este creat în codul care compilatorul prevede la punctul așteaptă utilizarea operatorului. Imaginați-vă că metoda de execuție completează în realizarea așteaptă. Acesta revine o sarcină într-un semn că lucrarea nu este încă finalizată. Metoda reconvenes, atunci când va sarcinile preconizate. Atunci când metoda de lucru este finalizată, se va reflecta în obiectul returnat de sarcini. Apelantul poate urmări starea sarcinilor care rezultă. pentru a determina timpul metodei de finalizare.
Acum, noua noastră metodă poate fi apelat din metoda Main:
Aici, în metoda principală. sincronizare cod așteaptă. Ori de câte ori este posibil, ar trebui să utilizați operatorul în loc să aștepte modul de așteptare sincron. Dar, în metoda principală a aplicației pentru consolă sunt interzise de la utilizarea operatorului așteaptă. În caz contrar, aplicația va înceta înainte de a îndeplini toate sarcinile sale.
Acest lucru creează o expresie lambda care reprezintă de acțiune delegat. care citește intrarile de la tastatura din consolă și modificați variabila locală, cu un timp de întârziere, în cazul, în cazul în care utilizatorul face clic pe butonul "<" или ">“. Această metodă folosește metoda ReadKey (). Pentru a bloca executarea și apăsarea tastelor de așteptat.
Pentru a finaliza crearea acestei funcții, avem nevoie de o nouă sarcină de instrucțiuni asincronă. metodă care returnează, inițiind ambele sarcini (GetInput și ShowTeleprompter) și gestionarea schimbului de date între sarcini.
Pune această clasă într-un fișier nou separat și încheiat în numele spațiu TeleprompterConsole. așa cum este arătat mai sus. Ar trebui să adăugați, de asemenea, declarația folosind statice. pentru a utiliza link-uri la metode și Max Min fără a specifica numele clasei exterioare sau spațiul de nume. folosind importuri statice toate metodele de instruire din aceeași clasă. Acest lucru este diferit de folosind instrucțiunile utilizate anterior. care importă toate clasele de spațiu de nume.
O altă caracteristică nouă este limba pentru tine - acest ghid de blocare. Se asigură că acest cod în orice moment, doar un singur fir poate rula. Dacă oricare dintre fluxul poartă secțiunea blocat, toate celelalte fire trebuie să aștepte până când iese din această secțiune. instrucțiune de blocare folosește un obiect care protejează o secțiune blocată. Această clasă corespunde principiului standard a obiectului de blocare privat în cadrul clasei.
Acum, trebuie să actualizați metodele și ShowTeleprompter GetInput pentru a utiliza noul config obiect. Și o sarcină de instrucțiuni. care returnează metoda asincronă. se execută atât sarcini și finalizarea lucrărilor, după încheierea primei probleme:
Aici vom folosi un apel la noua metodă WhenAny (sarcină []). Această metodă creează o sarcină (sarcină), care se termină imediat ce complet oricare dintre sarcinile din lista de argumente.
Acum, trebuie să actualizați metodele și ShowTeleprompter GetInput. că utilizează obiectul de configurare pentru întârziere:
Noua metodă versiune ShowTeleprompter este o nouă metodă în TeleprompterConfig clasă. Acum trebuie să modifice metoda principală. în schimb a cauzat ShowTeleprompter RunTeleprompter:
În cele din urmă, adăugați o metodă de clasă TelePrompterConfig SetDone Efectuat și proprietate:
concluzie
In acest tutorial, v-am arătat un număr de caracteristici de limbă C # și biblioteci de .NET Core, legate de a lucra în aplicații consolă. Pe baza cunoștințelor pe care va fi capabil să dezvolte înțelegerea lor a limbii și a claselor prezentate aici. Ați văzut exemple de bază de utilizare a fișierelor și de programare asincron consola de intrare-ieșire, pe baza problemelor cu blocarea și non-blocare. Veți obține informații despre limbajul C #, structura programelor în C #, precum și CLI și .NET Core fonduri.