Sunteți pe pagina 1din 2

Seminar 2 PAW

Interfetele ICloneable si IComparable

ICloneable
suporta copierea / clonarea obiectelor unei clase prin crearea unei noi instante a
respectivei clase, cu aceeasi valoare ca o instanta existenta;
este inclusa in namespace-ul System;
contine un singur membru, respectiv metoda Clone(), care creeaza un obiect nou,
reprezentand copia instantei curente.

public Animal Clone()


{
return (Animal)((ICloneable)this).Clone(); //creaza o copie a obiectului
curent de tip Animal
}
//metoda Clone() standard/implicita
object ICloneable.Clone()
{
return this.MemberwiseClone(); //creaza o copie superficiala a obiectului
curent
}

IComparable
defineste o metoda generalizata de comparare, pe care o clasa o implementeaza pentru
a-si ordona sau sorta obiectele;
este inclusa in namespace-ul System;
contine metoda CompareTo(), care compara instanta curenta cu un alt obiect de
acelasi tip si returneaza un intreg care indica daca instanta curenta precede, urmeaza
sau se afla pe aceeasi pozitie cu celalalt obiect.
A.CompareTo(B) poate fi:
< 0 => A precede B;
> 0 => A urmeaza B;
= 0 => A si B se afla pe aceeasi pozitie.

public int CompareTo(object obj)


{
if (obj is Animal)
{
Animal a2 = (Animal)obj; //mecanismul de despachetare (unboxing)
int result = string.Compare(this.NumeTip, a2.NumeTip);
if (result == 0)
{
result = string.Compare(this.Nume, a2.Nume);
}
return result;
}
else
{
throw new ArgumentException("the object is not of type Animal");
//se foloseste instructiunea throw pentru tratarea exceptiei, in situatia
in care obj nu este de tip Animal

}
}

Clase abstracte
Clasele abstracte se definesc doar in scopul de a deriva din ele alte clase.
O clasa abstracta nu poate fi instantiata. Clasele abstracte pot sa contina metode
abstracte, care nu au implementare in clasa abstracta, ci in clasa derivata.
O clasa abstracta presupune ca un obiect al clasei nu poate fi instantiat, dar se pot
realiza derivari ale acestuia.
//definire clasa abstracta
public abstract class Persoana
{
//campuri
protected string cnp;
protected string nume;
//proprietati
public string CNP
{
get { return cnp; }
}
public string NUME
{
get { return nume; }
set { if (value != null && !value.Equals("")) nume = value; }
}
//definire constructor cu parametri
public Persoana(string Cnp, string Nume)
{
this.cnp = Cnp;
this.nume = Nume;
}
//definire metoda abstracta
public abstract int SpuneVarsta();
}

Evenimente
O clasa eveniment inglobeaza:
o instanta de delegate, careia i se pune in fata public event;
o functie care activeaza delegatul, adica apeleaza o lista de functii.
Fara folosirea delegatului, evenimentul ar fi fost legat de o clasa si de numele unei
singure metode pe care trebuie sa o apeleze. Prin utilizarea delegatului, mai multe clase pot
subscrie la acelasi eveniment si pot folosi metode denumite diferit, deorece apelul lor se
realizeaza prin pointer / referinta.
-

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