Sunteți pe pagina 1din 42

INTRODUCERE

Cuprins
Mediul .NET i limbajul C#
Structura programelor C#
Operaii cu consola

Mediul .NET i limbajul C#


Limbajul C#:
limbaj de programare relativ nou
firma MicroSoft l-a anunat 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

.NET
Mediu pentru dezvoltarea i execuia unor
aplicaii, avnd urmtoarele caracteristici:
uurina n dezvoltarea unor servicii web
servicii runtime (n timpul execuiei) 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

Terminologie de baz
CLR (Common Language Runtime)
set de resurse standard ce pot fi folosite de aplicaiile
.NET, indiferent de limbajul n care au fost realizate:
modelul de programare obiectual:
motenire, polimorfism, tratarea excepiilor,
managementul automat al memoriei

faciliti de securitate
un sistem de tipuri
clasele de baz .NET
unelte pentru dezvoltare, depanare i profilare
managementul execuiei i codului
translatoare i optimizatoare de la limbajul IL ctre
limbajul main

CTS (Common Type System)

Se refer la toate tipurile suportate de partea .NET


runtime i ca urmare la tipurile ce pot fi folosite de
aplicaii
Exist ns limbaje ce nu suport chiar toate tipurile
din 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 interaciona cu alte programe scrise n
alte limbaje .NET

IL (Intermediate Language) sau MSIL sau CIL (Common


Intermediate Language)
Este un limbaj intermediar ntre codul surs .NET i
codul main dar independent de main
Orice program .NET este compilat i rezult un
program n limbajul IL
Apoi aceast form este convertit n cod main n
momentul n care acel software este instalat sau la
execuie de ctre 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 compilrii ntr-un limbaj intermediar comun

.NET

2. Structura programelor C#
Un program C#: o colecie de tipuri, definite n fiiere, ce
sunt organizate n spaii de nume (namespace), care
sunt compilate n module i apoi grupate n ansambluri
(assembly)
In general, aceste uniti organizatorice se pot
suprapune:
un ansamblu poate conine mai multe spaii de nume iar
un spaiu de nume poate fi inclus n mai multe ansamble,
.a.m.d.

Organizarea fiierelor este nesemnificativ pentru


compilatorul C#:
un ntreg proiect poate fi cuprins ntr-un singur fiier

10

Program C#:

11

Spaii de nume. Ansambluri. Aplicaii


Un spaiu de nume este de fapt o seciune de
cod identificat printr-un nume:
Se folosesc ca urmare a lucrului n echip:
este foarte posibil ca programatori diferii s utilizeze
aceleai nume pentru entiti diferite (clase, functii,)

Un spaiu de nume permite gruparea unor tipuri


corelate ntr-o manier ierarhic (similar cu folderele)
Prin convenie, spaiul de nume cel mai exterior este
numele organizaiei, urmat de numele proiectului iar
cel mai interior spaiu de nume se refer la un
domeniu specific
12

De exemplu:
namespace MyCompany {
namespace MyProduct {
class Point {

}
}

Care mai poate fi scris i astfel:


namespace MyCompany.MyProduct {
class Point {

13

Numele complet al unui tip include i spaiile de


nume n care a fost definit:
namespace Proiect_de_test
{
class Test {
static void Main ( ) {
MyCompany.MyProduct.Point x;

}
}
}

14

Aceast calificare complet poate fi evitat prin


utilizarea unei directive using:
prin care se cere compilatorului s recunoasc
numele dintr-un spaiu de nume:
namespace Proiect_de_test {
using MyCompany.MyProduct;
class Test {
static void Main ( ) {
Point x;

}
}
}

15

In cazul spaiilor de nume imbricate exist posibilitatea


asocierii unui nume (alias) unei construcii formate din
mai multe spaii de nume:
using System;
using csProd = MyCompany.MyProduct;
namespace Proiect_de_test {
class Test {
static void Main ( ) {
csProd.Point x;

}
}
}
16

Un spaiu de nume poate conine clase, structuri,


interfee, delegri i enumerri
.NET folosete spaiile de nume pentru a organiza
bibliotecile de clase n manier ierarhic
Exist i un spaiu de nume global:
n cadrul cruia sunt declarate implicit toate celelalte
spaii de nume i tipuri
dac un tip nu este declarat explicit n cadrul unui
spaiu de nume, acesta poate fi utilizat fr nici o
calificare n orice alt spaiu de nume deoarece face
parte din spaiul de nume global
17

Ansamblurile se folosesc, n principal, pentru


mpachetarea fizic:
Un ansamblu poate conine tipuri, cod executabil
pentru implementarea tipurilor ct i referine la alte
ansambluri
Tipuri de ansambluri:
aplicaii
biblioteci

O aplicaie 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

La lansarea n execuie a unei aplicaii se creaz


un domeniu al aplicaiei ce acioneaz ca i un
container i permite izolarea aplicaiilor ntre ele:
tipurile ncrcate ntr-un domeniu de aplicaie difer
de aceleai tipuri ncrcate n alt domeniu de aplicaie
iar instanele tipurilor nu sunt partajate ntre domeniile
de aplicaii

Lansarea unei aplicaii se face atunci cnd


mediul de execuie apeleaz o metod anume
numit i punct de intrare
Aceasta metod este ntotdeauna numit Main( )
i poate avea numai una din urmtoarele
semnturi:
19

static void Main( )


{}
static int Main( )
{}
static void Main(string[ ] args)
{}

static int Main(string[ ] args)


{}

20

Dac metoda Main( ) returneaz tipul ntreg:


valoarea returnat reprezint un cod de stare a
terminrii aplicaiei i se folosete pentru a comunica
mediului de execuie dac execuia s-a terminat cu
succes sau nu
n acest caz este obligatorie prezena unei instruciuni
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 apariiei unei erori n timpul execuiei

Dac metoda Main( ) nu returneaz nimic:


se folosete forma void Main( ) i execuia aplicaiei
se termin dup execuia ultimei instruciuni din
aceast metod

21

Dac nu exist parametri:


se folosete forma Main( ) i nu se specific cuvntul
cheie void

Dac metoda Main( ) are un parametru:


acesta se folosete pentru parametrii aplicaiei (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 existena unei instane a
unei clase
ca urmare poate fi apelat independent de existena
unui obiect
22

Observaii
Majoritatea aplicaiilor au o singur metod
Main( ):
ns pot exista mai multe metode Main( ) n spaii de
nume diferite dar numai una va fi punctul de intrare n
aplicaie
aceasta trebuie specificat la lansarea n execuie a aplicaiei

Nu exist o separare ntre declarare i


implementare (n C++: fiiere antet i fiiere
surs):
tot codul este plasat ntr-un singur fiier surs (numefiier.cs)

23

Caracterul ; se folosete ca i separator ntre


instruciuni
In C# codul este plasat n clase iar clasele sunt
grupate n spaii de nume
la modul cel mai simplu exist o singur clas, ntr-un
singur fiier, cu un spaiu de nume implicit

24

Exemplu:
Fiierul Hello.cs
using System;
class Hello {
static void Main( ) {
Console.WriteLine("Hello World");
}
}

25

Clase de baz
Spaiu de nume

Clase coninute

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

Intrri i ieiri. Operaii pe fiiere

System.Collections

Tablouri, liste, liste nlnuite i alte structuri

System.Web

Clase folosite pentru generarea paginilor web


utiliznd ASP+

System.Net

Clase folosite pentru cereri n reea sau n Internet

System.Data

Clase ADO+ ce uureaz accesul la date din baze


de date relaionale sau alte surse

System.WinForms

Clase ce permit afiarea unor controale Windows

Microsoft.Win32

Funcii accesibile anterior prin funcii Win32 API (de


exemplu accesul la regitri)
26

Intrri/ieiri de la consol
Clasa Console asigur accesul la intrarea
standard, ieirea standard i la fluxuri standard
de erori:
intrarea standard este asociat consolei n intrare
adic tastaturii
ieirea standard i fluxul standard de erori sunt
asociate consolei n ieire adic ecranului

Clasa Console poate fi utilizat n aplicaii


consol adic aplicaii care se execut ntr-o
fereastr de comenzi
27

Afiarea datelor
Pentru afiarea datelor se pot folosi metodele:
Console.Write( );
Console.WriteLine( );

Aceste metode sunt suprancrcate:


se pot folosi cu un numr variabil de parametri
se pot folosi cu parametri de tipuri diferite astfel c se
pot afia simplu numere, caractere, iruri

Primul parametru este un ir de caractere care


specific cum sunt afiate datele:
acest parametru care poate conine marcaje
(placeholder) ce sunt nlocuite n ordine cu parametrii
28
urmtori (din lista de parametri)

Forma unui marcaj (placeholder):


{N, M:Sir_de_formatare}
unde:
N este numrul de ordine al parametrului ce urmeaz
a fi afiat

M permite specificarea dimensiunii cmpului i a


modului de aliniere n cadrul cmpului
Sir_de_formatare permite specificarea modului n
care vor fi afiate valorile numerice:
acest ir poate conine un caracter care poate fi urmat de un
numr ce d numrul de digii afiati sau numrul de cifre
zecimale

29

Specificatori numerici:
Tip specificator

irul rezultat

Tip data

C[n]

$XX,XX.XX
($XX,XXX.XX)

Moneda local

D[n]

[-]XXXXXXX

Valori zecimale

E[n] or e[n]

[-]X.XXXXXXE+xxx Afiare cu exponent (format tiinific)


[-]X.XXXXXXe+xxx
[-]X.XXXXXXE-xxx
[-]X.XXXXXXe-xxx

F[n]

[-]XXXXXXX.XX

Afiare n virgul fix

G[n]

General-tiinific

Format general: varianta


cea mai compact

N[n]

[-]XX,XXX.XX

Numere ce includ i separatori

P[n]

[-]XX,XXX.XX %

Procente

Hex

Valori reale cu rotunjiri


Hexazecimal

R
X[n] sau x[n]

30

In cazul valorilor de tip DateTime, se pot folosi ali


descriptori pentru afiarea datei i a timpului:
Specificator
d
D
f
F
g
G
m, M
r, R
s
t
T
u
U
y, Y

irul rezultat
MM/dd/yyyy
dddd, MMMM dd, yyyy
dddd, MMMM dd, yyyy HH:mm
dddd, MMMM dd, yyyy HH:mm:ss
MM/dd/yyyy HH:mm
MM/dd/yyyy HH:mm:ss
MMMM dd
Ddd, dd MMM yyyy HH:mm:ss GMT
yyyy-MM-ddTHH:mm:ss
HH:mm
HH:mm:ss
yyyy-MM-dd HH:mm:ssZ
dddd, MMMM dd, yyyy HH:mm:ss
MMMM, yyyy

31

Afiarea irurilor se face direct fr 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


ctre un ir de caractere avem la dispoziie metoda
ToString( ) ce poate fi folosit direct, pentru o
variabil astfel:
int Age = 15;
Console.WriteLine("Age: {0}", Age.ToString( ));

32

Exemplul 1:
using System;
class TestDefaultFormats
{
static void Main( )
{
int i = 654321;
Console.WriteLine("{0:C}", i);
Console.WriteLine("{0:D}", i);
Console.WriteLine("{0:E}", i);
Console.WriteLine("{0:F}", i);
Console.WriteLine("{0:G}", i);
Console.WriteLine("{0:N}", i);
Console.WriteLine("{0:P}", i);
Console.WriteLine("{0:X}", i);
Console.WriteLine("{0:x}", i);
}
}

// $654,321.00
// 654321
// 6.543210E+005
// 654321.00
// 654321
/ 654,321.00
// 65,432,100.00 %
// 9FBF1
// 9fbf1

33

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

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

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

Citirea datelor
Pentru citirea datelor se pot folosi metodele:
int Console.Read( );
string Console.ReadLine( );

Metoda Read( ):
citete un caracter de la consol
returneaz codul caracterului sau valoarea 1 dac
nu exist un caracter disponibil

Metoda ReadLine( ):
citete un ir de caractere pn la ntlnirea
caracterului CR
returneaz acest ir

37

Pentru citirea datelor se mai pot folosi:


property bool KeyAvailable;
ConsoleKeyInfo ReadKey( );
ConsoleKeyInfo ReadKey (bool intercept);

Proprietatea KeyAvailable specific dac s-a apsat o


tast caracter sau taste funcionale
Metodele ReadKey( ) permit citirea tastei apsate dar i
a strii tastelor CTRL, ALT, SHIFT prin intermediul unui
obiect de tipul ConsoleKeyInfo
prima variant afieaz tasta apsat la consol
a doua variant permite specificarea acestei opiuni prin
intermediul parametrului
ambele variante ateapt pn se apas o tast caracter sau
una funcional
38

In C# se pot citi de la consol direct numai


caractere individuale sau iruri de caractere:
string input = Console.ReadLine( );
Console.WriteLine({0}, input);

Dac avem nevoie de citirea altor tipuri atunci


trebuie s facem diferite conversii:
platforma .NET furnizeaz un mecanism numit parse
i o metod Parse( ) pentru astfel de operaii :
Tip.Parse(string);

39

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

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

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

S-ar putea să vă placă și