Introduce c# ut

42
INTRODUCERE

description

introducere c#

Transcript of Introduce c# ut

Page 1: Introduce c# ut

INTRODUCERE

Page 2: Introduce c# ut

Cuprins

• Mediul .NET şi limbajul C#

• Structura programelor C#

• Operaţii cu consola

2

Page 3: Introduce c# ut

Mediul .NET şi limbajul C#

• Limbajul C#:– limbaj de programare relativ nou

– firma MicroSoft l-a anunţat în anul 2000 şi l-a lansatîn ianuarie 2002

– proiectat pentru a lucra în mediul .NET

• Caracteristici de bază: – simplitate, obiectual, puternic tipizat (type safe),

– derivat din limbajele C şi C++, din Java precum şi din VB respectiv Delphi

3

Page 4: Introduce c# ut

• .NET

• Mediu pentru dezvoltarea şi execuţia unor

aplicaţii, având următoarele caracteristici:

– uşurinţa în dezvoltarea unor servicii web

– servicii runtime (în timpul execuţiei) disponibile pentru

componente scrise în diverse limbaje de programare

– interoperabilitate între limbaje şi chiar între platform

• Mediile de programare își instalează automat

versiunea de .NET necesară

• Versiuni: 1.0 ... 4.5

4

Page 5: Introduce c# ut

• CLR (Common Language Runtime)

– set de resurse standard ce pot fi folosite de aplicaţiile

.NET, indiferent de limbajul în care au fost realizate:

• modelul de programare obiectual:

– moştenire, polimorfism, tratarea excepţiilor,

managementul automat al memoriei

• facilităţi de securitate

• un sistem de tipuri

• clasele de bază .NET

• unelte pentru dezvoltare, depanare şi profilare

• managementul execuţiei şi codului

• translatoare şi optimizatoare de la limbajul IL către

limbajul maşină

Terminologie de bază

5

Page 6: Introduce c# ut

• CTS (Common Type System)– Se referă la toate tipurile suportate de partea .NET

runtime şi ca urmare la tipurile ce pot fi folosite de aplicaţii

– Există însă limbaje ce nu suportă chiar toate tipuriledin CTS

• CLS (Common Language Specification)– Este un subset al CTS pe care toate limbajele .NET

îl suportă

– Ca urmare, un program care utilizează tipuri din CLS poate interacţiona cu alte programe scrise înalte limbaje .NET

6

Page 7: Introduce c# ut

• IL (Intermediate Language) sau MSIL sau CIL (Common

Intermediate Language)

– Este un limbaj intermediar între codul sursă .NET şi

codul maşină dar independent de maşină

– Orice program .NET este compilat şi rezultă un

program în limbajul IL

– Apoi această formă este convertită în cod maşină în

momentul în care acel software este instalat sau la

execuţie de către compilatorul JIT (Just In Time)

– Platforma .NET este organizată în jurul CLR (similar

cu JVM) şi un set de biblioteci ce pot fi folosite de mai

multe limbaje de programare şi pot lucra împreună ca

urmare a compilării într-un limbaj intermediar comun

7

Page 8: Introduce c# ut

• .NET

8

Page 9: Introduce c# ut

9

Page 10: Introduce c# ut

• Un program C#: o colecţie de tipuri, definite în fişiere, ce

sunt organizate în spaţii de nume (namespace), care

sunt compilate în module şi apoi grupate în ansambluri

(assembly)

• In general, aceste unităţi organizatorice se pot

suprapune:

– un ansamblu poate conţine mai multe spaţii de nume iar

un spaţiu de nume poate fi inclus în mai multe ansamble,

ş.a.m.d.

• Organizarea fişierelor este nesemnificativă pentru

compilatorul C#:

– un întreg proiect poate fi cuprins într-un singur fişier

2. Structura programelor C#

10

Page 11: Introduce c# ut

• Program C#:

11

Page 12: Introduce c# ut

Spaţii de nume. Ansambluri. Aplicaţii

• Un spaţiu de nume este de fapt o secţiune de

cod identificată printr-un nume:

– Se folosesc ca urmare a lucrului în echipă:

• este foarte posibil ca programatori diferiţi să utilizeze

aceleaşi nume pentru entităţi diferite (clase, functii,…)

– Un spaţiu de nume permite gruparea unor tipuri

corelate într-o manieră ierarhică (similar cu folderele)

– Prin convenţie, spaţiul de nume cel mai exterior este

numele organizaţiei, urmat de numele proiectului iar

cel mai interior spaţiu de nume se referă la un

domeniu specific12

Page 13: Introduce c# ut

• De exemplu:

namespace MyCompany {

namespace MyProduct {

class Point {

}

}

}

• Care mai poate fi scris şi astfel:

namespace MyCompany.MyProduct {

class Point {

}

}13

Page 14: Introduce c# ut

• Numele complet al unui tip include şi spaţiile de

nume în care a fost definit:

namespace Proiect_de_test

{

class Test {

static void Main ( ) {

MyCompany.MyProduct.Point x;

}

}

}

14

Page 15: Introduce c# ut

• Această calificare completă poate fi evitată prin utilizarea unei directive using:– prin care se cere compilatorului să recunoască

numele dintr-un spaţiu de nume:

namespace Proiect_de_test {

using MyCompany.MyProduct;

class Test {

static void Main ( ) {

Point x;

}

}

}

15

Page 16: Introduce c# ut

• In cazul spaţiilor de nume imbricate există posibilitatea asocierii unui nume (alias) unei construcţii formate din mai multe spaţii de nume:

using System;

using csProd = MyCompany.MyProduct;

namespace Proiect_de_test {

class Test {

static void Main ( ) {

csProd.Point x;

}

}

}

16

Page 17: Introduce c# ut

• Un spaţiu de nume poate conţine clase, structuri,

interfeţe, delegări şi enumerări

• .NET foloseşte spaţiile de nume pentru a organiza

bibliotecile de clase în manieră ierarhică

• Există şi un spaţiu de nume global:

– în cadrul căruia sunt declarate implicit toate celelalte

spaţii de nume şi tipuri

– dacă un tip nu este declarat explicit în cadrul unui

spaţiu de nume, acesta poate fi utilizat fără nici o

calificare în orice alt spaţiu de nume deoarece face

parte din spaţiul de nume global

17

Page 18: Introduce c# ut

• Ansamblurile se folosesc, în principal, pentru

împachetarea fizică:

– Un ansamblu poate conţine tipuri, cod executabil

pentru implementarea tipurilor cât şi referinţe la alte

ansambluri

– Tipuri de ansambluri:

• aplicaţii

• biblioteci

– O aplicaţie are un punct de intrare principal şi are de

obicei extensia .exe

– Bibliotecile nu au un punct de intrare principal şi au

de obicei extensia .dll

18

Page 19: Introduce c# ut

• La lansarea în execuţie a unei aplicaţii se crează

un domeniu al aplicaţiei ce acţionează ca şi un

container şi permite izolarea aplicaţiilor între ele:

– tipurile încărcate într-un domeniu de aplicaţie diferă

de aceleaşi tipuri încărcate în alt domeniu de aplicaţie

iar instanţele tipurilor nu sunt partajate între domeniile

de aplicaţii

• Lansarea unei aplicaţii se face atunci când

mediul de execuţie apelează o metodă anume

numită şi punct de intrare

• Aceasta metodă este întotdeauna numită Main( )

şi poate avea numai una din următoarele

semnături:19

Page 20: Introduce c# ut

• static void Main( )

{…}

• static int Main( )

{…}

• static void Main(string[ ] args)

{…}

• static int Main(string[ ] args)

{…}

20

Page 21: Introduce c# ut

• Dacă metoda Main( ) returnează tipul întreg:

– valoarea returnată reprezintă un cod de stare a

terminării aplicaţiei şi se foloseşte pentru a comunica

mediului de execuţie dacă execuţia s-a terminat cu

succes sau nu

– în acest caz este obligatorie prezenţa unei instrucţiuni

return expresie în corpul metodei

– de regulă, se returnează valoarea 0 pentru a specifica

că programul s-a executat cu succes sau o valoare

nenulă în cazul apariţiei unei erori în timpul execuţiei

• Dacă metoda Main( ) nu returnează nimic:

– se foloseşte forma void Main( ) şi execuţia aplicaţiei

se termină după execuţia ultimei instrucţiuni din

această metodă21

Page 22: Introduce c# ut

• Dacă nu există parametri:– se foloseşte forma Main( ) şi nu se specifică cuvântul

cheie void

• Dacă metoda Main( ) are un parametru:– acesta se foloseşte pentru parametrii aplicaţiei (de

obicei parametri din linia de comandă)

– parametrul metodei Main este întotdeauna un tablou de şiruri, cu indicii pornind de la 0 şi nu poate avea valoarea null

• Metoda Main( ) este o metodă statică:– pentru că nu depinde de existenţa unei instanţe a

unei clase

– ca urmare poate fi apelată independent de existenţa unui obiect

22

Page 23: Introduce c# ut

Observaţii

• Majoritatea aplicaţiilor au o singură metodă Main( ):– însă pot exista mai multe metode Main( ) în spaţii de

nume diferite dar numai una va fi punctul de intrare în aplicaţie

• aceasta trebuie specificată la lansarea în execuţie a aplicaţiei

• Nu există o separare între declarare şi implementare (în C++: fişiere antet şi fişiere sursă):– tot codul este plasat într-un singur fişier sursă (nume-

fişier.cs)

23

Page 24: Introduce c# ut

• Caracterul ‘;’ se foloseşte ca şi separator între

instrucţiuni

• In C# codul este plasat în clase iar clasele sunt

grupate în spaţii de nume

– la modul cel mai simplu există o singură clasă, într-un

singur fişier, cu un spaţiu de nume implicit

24

Page 25: Introduce c# ut

• Exemplu:

Fişierul Hello.cs

using System;

class Hello {

static void Main( ) {

Console.WriteLine("Hello World");

}

}

25

Page 26: Introduce c# ut

Clase de bază• Spaţiu de nume Clase conţinute

System Clase fundamentale folosite frecvent (clasa object, tipuri fundamentale: int, string, double,…)

System.Reflection Clase ce permit examinarea datelor ce descriu ansamblurile, obiectele şi tipurile (metadate)

System.IO Intrări şi ieşiri. Operaţii pe fişiere

System.Collections Tablouri, liste, liste înlănţuite şi alte structuri

System.Web Clase folosite pentru generarea paginilor web utilizând ASP+

System.Net Clase folosite pentru cereri în reţea sau în Internet

System.Data Clase ADO+ ce uşurează accesul la date din baze de date relaţionale sau alte surse

System.WinForms Clase ce permit afişarea unor controale Windows

Microsoft.Win32 Funcţii accesibile anterior prin funcţii Win32 API (de exemplu accesul la regiştri) 26

Page 27: Introduce c# ut

Intrări/ieşiri de la consolă

• Clasa Console asigură accesul la intrarea standard, ieşirea standard şi la fluxuri standard de erori:– intrarea standard este asociată consolei în intrare

adică tastaturii

– ieşirea standard şi fluxul standard de erori sunt asociate consolei în ieşire adică ecranului

• Clasa Console poate fi utilizată în aplicaţii consolă adică aplicaţii care se execută într-o fereastră de comenzi

27

Page 28: Introduce c# ut

Afişarea datelor

• Pentru afişarea datelor se pot folosi metodele:

Console.Write( );

Console.WriteLine( );

• Aceste metode sunt supraîncărcate:– se pot folosi cu un număr variabil de parametri

– se pot folosi cu parametri de tipuri diferite astfel că se pot afişa simplu numere, caractere, şiruri

• Primul parametru este un şir de caractere care specifică cum sunt afişate datele:– acest parametru care poate conţine marcaje

(placeholder) ce sunt înlocuite în ordine cu parametriiurmători (din lista de parametri) 28

Page 29: Introduce c# ut

• Forma unui marcaj (placeholder):

{N, M:Sir_de_formatare}

• unde:– N este numărul de ordine al parametrului ce urmează

a fi afişat

– M permite specificarea dimensiunii câmpului şi a modului de aliniere în cadrul câmpului

– Sir_de_formatare permite specificarea modului în care vor fi afişate valorile numerice:

• acest şir poate conţine un caracter care poate fi urmat de un număr ce dă numărul de digiţi afişati sau numărul de cifre zecimale

29

Page 30: Introduce c# ut

• Specificatori numerici:

Tip specificator Şirul rezultat Tip data

C[n] $XX,XX.XX Moneda locală

($XX,XXX.XX)

D[n] [-]XXXXXXX Valori zecimale

E[n] or e[n] [-]X.XXXXXXE+xxx Afişare cu exponent (format ştiinţific)

[-]X.XXXXXXe+xxx

[-]X.XXXXXXE-xxx

[-]X.XXXXXXe-xxx

F[n] [-]XXXXXXX.XX Afişare în virgulă fixă

G[n] General-ştiinţific Format general: varianta cea mai compactă

N[n] [-]XX,XXX.XX Numere ce includ şi separatori

P[n] [-]XX,XXX.XX % Procente

R Valori reale cu rotunjiri

X[n] sau x[n] Hex Hexazecimal 30

Page 31: Introduce c# ut

• In cazul valorilor de tip DateTime, se pot folosi alţi descriptori pentru afişarea datei şi a timpului:

Specificator Şirul rezultat

d MM/dd/yyyy

D dddd, MMMM dd, yyyy

f dddd, MMMM dd, yyyy HH:mm

F dddd, MMMM dd, yyyy HH:mm:ss

g MM/dd/yyyy HH:mm

G MM/dd/yyyy HH:mm:ss

m, M MMMM dd

r, R Ddd, dd MMM yyyy HH:mm:ss GMT

s yyyy-MM-ddTHH:mm:ss

t HH:mm

T HH:mm:ss

u yyyy-MM-dd HH:mm:ssZ

U dddd, MMMM dd, yyyy HH:mm:ss

y, Y MMMM, yyyy 31

Page 32: Introduce c# ut

– Afişarea şirurilor se face direct fără şir de formatare:

Console.WriteLine(“Suma dintre {0} si {1} este {2}”,

10, 20, 10+20);

Console.WriteLine(“Suma dintre {0,-8} si {1,-8} este

{2,8}”, 10, 20, 10+20);

– Dacă dorim conversia unei valori dintr-o variabilă

către un şir de caractere avem la dispoziţie metoda

ToString( ) ce poate fi folosită direct, pentru o

variabilă astfel:

int Age = 15;

Console.WriteLine("Age: {0}", Age.ToString( ));

32

Page 33: Introduce c# ut

• Exemplul 1:using System;

class TestDefaultFormats

{

static void Main( )

{

int i = 654321;

Console.WriteLine("{0:C}", i); // $654,321.00

Console.WriteLine("{0:D}", i); // 654321

Console.WriteLine("{0:E}", i); // 6.543210E+005

Console.WriteLine("{0:F}", i); // 654321.00

Console.WriteLine("{0:G}", i); // 654321

Console.WriteLine("{0:N}", i); / 654,321.00

Console.WriteLine("{0:P}", i); // 65,432,100.00 %

Console.WriteLine("{0:X}", i); // 9FBF1

Console.WriteLine("{0:x}", i); // 9fbf1

}

}33

Page 34: Introduce c# ut

• Exemplul 2:

using System;

class TestIntegerFormats

{

static void Main( )

{

int i = 123;

Console.WriteLine("{0:C6}", i); // $123.000000

Console.WriteLine("{0:D6}", i); // 000123

Console.WriteLine("{0:E6}", i); // 1.230000E+002

Console.WriteLine("{0:G6}", i); // 123

Console.WriteLine("{0:N6}", i); // 123.000000

Console.WriteLine("{0:X6}", i); // 00007B

34

Page 35: Introduce c# ut

i = -123;

Console.WriteLine("{0:C6}", i); // ($123.000000)

Console.WriteLine("{0:D6}", i); // -000123

Console.WriteLine("{0:E6}", i); // -1.230000E+002

Console.WriteLine("{0:G6}", i); // -123

Console.WriteLine("{0:N6}", i); // -123.000000

Console.WriteLine("{0:X6}", i); // FFFF85

}

}

35

Page 36: Introduce c# ut

• Exemplul 3:using System;

class TestDateTimeFormats

{

static void Main( )

{

DateTime dt = new DateTime(2007, 10, 23, 19, 15, 33);

Console.WriteLine(dt.ToString()); // "10/23/2007 7:15:33 PM"

Console.WriteLine("{0}", dt); // "10/23/2007 7:15:33 PM"

Console.WriteLine("{0:d}", dt); // "10/23/2007"

Console.WriteLine("{0:D}", dt); // "Tuesday, October 23, 2007"

Console.WriteLine("{0:t}", dt); // "7:15 PM"

Console.WriteLine("{0:T}", dt); // "7:15:33 PM"

Console.WriteLine("{0:u}", dt); // "2007-10-23 19:15:33Z"

}

} 36

Page 37: Introduce c# ut

Citirea datelor

• Pentru citirea datelor se pot folosi metodele:

int Console.Read( );

string Console.ReadLine( );

• Metoda Read( ):– citeşte un caracter de la consolă

– returnează codul caracterului sau valoarea –1 dacănu există un caracter disponibil

• Metoda ReadLine( ):– citeşte un şir de caractere până la întâlnirea

caracterului CR

– returnează acest şir 37

Page 38: Introduce c# ut

• Pentru citirea datelor se mai pot folosi:

property bool KeyAvailable;

ConsoleKeyInfo ReadKey( );

ConsoleKeyInfo ReadKey (bool intercept);

• Proprietatea KeyAvailable specifică dacă s-a apăsat o

tastă caracter sau taste funcţionale

• Metodele ReadKey( ) permit citirea tastei apăsate dar şi

a stării tastelor CTRL, ALT, SHIFT prin intermediul unui

obiect de tipul ConsoleKeyInfo

– prima variantă afişează tasta apăsată la consolă

– a doua variantă permite specificarea acestei opţiuni prin

intermediul parametrului

– ambele variante aşteaptă până se apasă o tastă caracter sau

una funcţională38

Page 39: Introduce c# ut

• In C# se pot citi de la consolă direct numaicaractere individuale sau şiruri de caractere:

string input = Console.ReadLine( );

Console.WriteLine(“{0}”, input);

• Dacă avem nevoie de citirea altor tipuri atuncitrebuie să facem diferite conversii:– platforma .NET furnizează un mecanism numit parse

şi o metodă Parse( ) pentru astfel de operaţii :

Tip.Parse(string);

39

Page 40: Introduce c# ut

• Exemplul 1:

using System;

class ReadFromConsole

{

public static void Main( )

{

Console.Write("Introduceti numele: ");

string strNume = Console.ReadLine( );

Console.Write("Introduceti prenumele: ");

string strPrenume = Console.ReadLine( );

Console.Write("Introduceti varsta: ");

string strVarsta = Console.ReadLine( );

Console.WriteLine( );

Console.WriteLine("Nume: " + strNume);

Console.WriteLine("Prenume: " + strPrenume);

Console.WriteLine("Varsta: " + strVarsta);

}

} 40

Page 41: Introduce c# ut

• Exemplul 2:

using System;

class ReadFromConsole

{

public static void Main( )

{

string myInput;

int myInt;

Console.Write("Introduceti un numar: ");

myInput = Console.ReadLine( );

myInt = Int32.Parse(myInput);

Console.WriteLine("Numarul introdus este: {0}.", myInt);

Console.Write("Introduceti un sir: ");

myInput = Console.ReadLine( );

Console.WriteLine("Sirul introdus este: {0}.", myInput);

41

Page 42: Introduce c# ut

DateTime dt;

Console.Write("Introduceti o data calendaristica(dd-mm-yyyy): ");

dt = DateTime.Parse(Console.ReadLine( ));

Console.Write("Data & Timpul: ");

Console.WriteLine(dt);

Console.WriteLine("\t{0:D}", dt);

}

}

42