11 martie 2011

Introducere in C#

INTRODUCERE

Variabilele/metodele unei clase pot fi de tipul:
* public - sunt vizibile pentru toate clasele
* private - vizibile doar claselor carora le apartin
* protected - vizibile claselor carora le apartin si celor care le mostenesc (subclase)

Mai putin folosite sunt cele:
* internal - pot fi accesate din acelasi cod assembler, nu si din altul
* protected internal - la fel ca internal, insa pot fi accesate si din alt cod assemble ce corespunde unei clase derivate
* static - clasa nu poate fi instantiata, membrii sai fiind la randul lor statici

Ce sunt proprietatile?
- membrii ai claselor care ofera un mecanism de citire, scriere sau calcul de valori ale campurilor private clasei respective


EXEMPLU

O clasa abstracta numita Forma. Abstracta inseamna ca nu poate fi instantiata (dar poate fi mostenita de catre o alta clasa).


public abstract class Forma {

private string culoare;
private int left;
private int top;
//proprietati ~ incapsulare
public string Culoare
{
get { return culoare; } //puteau fi actiuni + return
set { culoare = value; }
}

public int Left
{
get { return left; }
set { left = value; }
}

public int Top
{
get;
set;
}
public Forma() {
Console.WriteLine("Sunt o forma draguta");
left = 0; top = 0;
}

public void Deseneaza(string what) {
Console.WriteLine("Am desenat "+what);
}

public void Muta() {
Console.WriteLine("Am mutat o forma; left="+left+" si top="+top); //parametri
}

public void Sterge() {
Console.WriteLine("Am sters forma");
}
}


Mostenirea (derivarea) este procesul prin care o clasa primeste toate variabilele si metodele ne-private ale unei alte clase, putand avea si propriile variabile sau metode, pe langa acestea.

Interfata:
* seamana cu o clasa abstracta prin faptul ca orice clasa ce o mosteneste trebuie sa ii implementeze metodele (care exista neimplementate in interfata)
* nu poate fi instantiata direct
* clasele si structurile pot mosteni mai multe interfete, iar la randul ei o interfata poate mosteni mai multe interfete


EXEMPLU

public class Linie : Forma {

public int lungime;
Punct p1, p2;

public Linie(Punct p1, Punct p2) {
this.p1 = p1;
this.p2 = p2;
lungime = (int)Math.Sqrt(Math.Pow(p1.X - p2.X, 2) + Math.Pow(p1.Y - p2.Y,2));
Console.WriteLine("Lungimea liniei este: " + lungime);
}
}


Pe langa clase si obiecte (=instante ale claselor), se afla si structurile, niste "obiecte" mai restranse prin faptul ca nu detin metode si nu pot fi mostenite.

public struct Punct
{
public int X;
public int Y;
}


Ceva mai restrans decat structurile se afla enumeratiile .

public enum TipImagine { Bmp, Jpeg, Png }


In C# -ca o particularitate- in interiorul codului putem gasi regiuni cu simplu rol in vizibilitate . In Visual Studio aceasta regiune se poate restrange pentru a economisi spatiu ocupat pe ecran, sau se poate expanda pentru a o vedea in detaliu.

#region Variable
int a = 5;
int b = 10;
int c = a + b;
string str = c.ToString();
#endregion


Alte notiuni importante sunt:
* incapsularea - sau "ascunderea informatiei" - variabilele membre care sunt private vor fi incapsulate pentru a putea fi accesate doar de anumite metode sau proprietati.
De exemplu: intr-o clasa avem o variabila privata x si o metoda publica ce se ocupa cu setarea lui x. Astfel, nu vom putea seta variabila x direct ci prin intermediul metodei.
* polimorfismul - o clasa poate mosteni alta clasa si in acelasi timp poate suprascrie anumite metode. In C#, clasa originala ar avea metoda respectiva virtuala, in timp ce clasa ce o mosteneste o va denumi override.

Niciun comentariu: