Sunteți pe pagina 1din 259

Visual C#

Lucian Sasu

May 30, 2005

2

Cuprins

1 Platforma Microsoft .NET

 

9

1.1 Prezentare general˘a .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

1.2 Arhitectura platformei Microsoft .NET

.

.

.

.

.

.

.

.

.

.

.

.

.

11

1.3 Componente ale lui .NET Framework

 

12

1.3.1 Microsoft Intermediate Language

 

.

.

.

.

.

.

.

.

.

.

.

.

12

1.3.2 Common Language Specification

.

.

.

.

.

.

.

.

.

.

.

.

12

1.3.3 Common Language Runtime

 

13

1.3.4 Common Type System

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

14

Metadata

1.3.5 .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

1.3.6 Assemblies

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

16

1.3.7 Assembly cache

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

1.3.8 Garbage collection

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

1.4 Tr˘as˘aturi ale platformei .NET

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

2 Tipuri predefinite, tablouri, string-uri

 

21

2.1 Vedere general˘a asupra limbajului C#

2.2 Tipuri de date .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

21

23

. 2.2.1 Tipuri predefinite

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

24

2.2.2 Tipuri valoare

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

25

   

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

2.2.3 Tipul enumerare .

2.3.1 Tablouri unidimensionale

2.3 Tablouri

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

36

36

2.3.2 Tablouri multidimensionale

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

37

2.4 S¸iruri de caractere

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

2.4.1

Expresii regulate

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

3 Clase, instruct¸iuni, spat¸ii de nume

 

45

3.1 Clase – vedere general˘a .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

45

3.2 Transmiterea de parametri

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

49

3.3 Conversii

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

55

3.3.1

Conversii implicite

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

55

 

3

4

CUPRINS

3.3.2 Conversiile implicite ale expresiilor constante

 

57

3.3.3 Conversii explicite

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

57

3.3.4 Boxing ¸si unboxing

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

60

3.3.5 Declarat¸ii de variabile ¸si constante

.

.

.

.

.

.

.

.

.

.

.

62

3.3.6 Declarat¸ii de etichete

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

62

3.3.7 Instruct¸iuni de select¸ie

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

63

3.3.8 Instruct¸iuni de ciclare

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

64

3.3.9 Instruct¸iuni de salt

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

66

3.3.10 Instruct¸iunile try, throw, catch, finally

.

.

.

.

.

.

.

.

.

66

3.3.11 Instruct¸iunile checked ¸si unchecked

.

.

.

.

.

.

.

.

.

.

.

67

3.3.12 Instruct¸iunea lock .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

67

3.3.13 Instruct¸iunea using

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

67

3.4

Spat¸ii de nume

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

68

3.4.1 Declarat¸ii de spat¸ii de nume

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

69

3.4.2 Directiva using

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

70

4 Clase

75

4.1 Declararea unei clase

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

75

4.2 Membrii unei clase

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

76

4.3 Cˆampuri

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

77

4.3.1 Cˆampuri instant¸e

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

77

4.3.2 Cˆampuri statice

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

77

4.3.3 Cˆampuri readonly .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

78

4.3.4 Cˆampuri volatile

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

78

4.3.5 Init¸ializarea cˆampurilor .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

79

4.4 Constante

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

79

4.5 Metode .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

80

4.5.1 Metode statice ¸si nestatice

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

81

4.5.2 Metode externe

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

81

4.6 Propriet˘at¸i

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

81

4.7 Indexatori

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

87

4.8 Operatori

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

92

4.8.1 Operatori unari

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

93

4.8.2 Operatori binari

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

95

4.8.3 Operatori de conversie

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

95

4.8.4 Exemplu: clasa Fraction

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

96

4.9 Constructori de instant¸˘a

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

99

4.10 Constructori statici

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

99

4.11 Clase interioare

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

101

CUPRINS

5

5 Destructori. POO ˆın C#

 

105

5.1 Destructori

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

105

5.2 Specializarea ¸si generalizarea

 

107

5.2.1 Specificarea mo¸stenirii

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

107

5.2.2 Apelul constructorilor din clasa de baz˘a

.

.

.

.

.

.

108

5.2.3 Operatorii is ¸si as

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

110

5.3 Clase sealed

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

110

5.4 Polimorfismul

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

111

5.4.1 Polimorfismul parametric

 

111

5.4.2 Polimorfismul ad–hoc

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

111

5.4.3 Polimorfismul de mo¸stenire

 

111

5.4.4 Virtual ¸si override

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

113

5.4.5 Modificatorul new pentru metode

 

114

5.4.6 Metode sealed

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

116

5.4.7 Exemplu folosind virtual, new, override, sealed

 

117

5.5 Clase ¸si metode abstracte

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

119

5.6 Interfet¸e

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

120

5.6.1

Clase abstracte sau interfet¸e?

.

.

.

.

.

.

.

.

.

.

.

.

126

6 Delegat¸i. Evenimente. Structuri

 

127

6.1 Tipul delegat

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

127

6.1.1

Utilizarea delegat¸ilor pentru a specifica metode la run-

time

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

128

6.1.2 Delegat¸i statici

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

131

6.1.3 Multicasting .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

132

6.2 Evenimente

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

135

6.2.1 Publicarea ¸si subscrierea

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

135

6.2.2 Evenimente ¸si delegat¸i

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

135

6.2.3 Comentarii

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

142

6.3 Structuri

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

142

6.3.1

Structuri sau clase? .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

146

7 Tratarea except¸iilor. Atribute

 

147

7.1 Tratarea except¸iilor .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

147

7.1.1 Tipul Exception .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

147

7.1.2 Aruncarea ¸si prinderea except¸iilor

 

148

7.1.3 Reˆıncercarea codului

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

159

7.1.4 Compararea tehnicilor de manipulare a erorilor

.

.

161

7.1.5 Sugestie pentru lucrul cu except¸iile .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7.2 Atribute

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

162

163

7.2.1

Generalit˘at¸i

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

163

6

CUPRINS

7.2.2 Atribute predefinite

 

.

.

.

.

.

.

.

.

.

.

.