Documente Academic
Documente Profesional
Documente Cultură
Curs
Curs
Curs 2
Clase
Materialul de fata se bazeaza pe:
Inside C# Second Edition, T. Archer
MSDN
O clasa poate fi definita ca incapsularea datelor si metodelor ce lucreaza pe aceste date.
Definirea claselor. Sintaxa:
[attributes] [modifiers] class <className> [: baseClassName]
{
[corp clasa]
}[;]
Exemplu:
class Student
{
private long IdStudent;
}
Contine o singura data membru, IdStudent, ce are modificatorul de acces private.
Membrii clasei
In continuare prezentam lista tipurilor ce o putem defini ca membri pentru o clasa C#.
Campuri (Fields)
Un camp (field) este o variabila membru folosita pentru a pastra o valoare. Pentru un camp se
pot aplica mai multi modificatori: static, readonly si const.
Metode
O metoda contine codul ce actioneaza pe datele obiectului.
Proprietati
Proprietatile mai sunt cunoscute si sub numele de smart fields pentru ca ele sunt metode, iar
de client sunt vazute drept campuri.
Constante
O constanta este un camp cu o valoare ce nu poate fi schimbata.
Indexeri
Un indexer este referit ca smart array; permite sa lucram cu clase ce reprezinta in mod logic
un tablou de date.
Pentru a indexa datele clasei, proiectantul clasei are doua posibilitati: fie permite accesul
direct la datele interne ale clasei (date reprezentate sub forma de tablou), fie furnizeaza
metode ce au ca parametri un index ce defineste elementul din tablou ce va fi folosit.
2
Evenimente
Un eveniment are ca efect executia unui cod. SO Windows se bazeaza pe evenimente. In
general evenimentele genereaza mesaje.
Operatori
In C# putem supraincarca operatorii matematici.
Modificator de acces Descriere
public
Membrul este accesibil din afara definitiei clasei si a ierarhiei
claselor derivate.
protected
Membrul nu este vizibil in afara clasei si poate fi accesat
numai de clasele derivate.
private
Membrul nu este vizibil in afara clasei si nici in clasele
derivate.
internal
Membrul este vizibil numai in interiorul unitatii curente de
compilare, numai din fisierele din acelasi assembly. Acest
modificator creaza un hibrid intre public si protected, totul
depinzind in ultima instanta de locul unde se afla codul. O
utilizare comuna a acestui modificator este in dezvoltarea
bazata pe componente pentru ca permite unui grup de
componente sa coopereze intr-un mod privat.
protected internal *
Accesul este limitat la assembly-ul curent sau la tipurile
derivate din clasa continuta.
Implicit modificatorul de acces este private.
Membru in Accesibilitate
implicita
Permite modificarea accesibilitatii
enum public -
class private public
protected
internal
private
protected internal
interface public -
struct private public
internal
private
In C# trebuie sa indicam pentru fiecare data membru modificatorul de acces.
In C++ putem scrie:
class Cpp
{
public:
3
int a;
int b;
int c;
protected:
int d;
int e;
};
iar in C# acelasi lucru se descrie astfel:
class CSharp
{
public int a;
public int b;
public int c;
protected int d;
protected int e;
}
Exemple:
modificator de acces protected
class A
{
protected int x = 123;
}
class B : A
{
void F()
{
A a = new A();
B b = new B();
a.x = 10; // Eroare
b.x = 10; // OK
}
}
modificator de acces: internal
Exemplul (vezi MSDN) urmator contine doua fisiere, Assembly1.cs si Assembly2.cs. In
primul fisier se declara o clasa de baza, BaseClass ca fiind internal, in cel de-al doilea fisier se
incearca sa se acceseze membrul din clasa de baza.
Fiser Assembly1.cs:
// Assembly1.cs
// compile with: /target:library
internal class BaseClass
{
public static int IntM = 0;
}
Fisier Assembly2.cs
// Assembly2.cs
// compile with: /reference:Assembly1.dll
// CS0122 expected
class TestAccess
{
4
public static void Main()
{
BaseClass myBase = new BaseClass();
// eroare, BaseClass nu este vizibila in afara assembly
}
}
Domeniul de accesibilitate
Domeniul de accesibiltate a unui membru specifica unde, in sectiunile programului, un
membru poate fi referit.