Documente Academic
Documente Profesional
Documente Cultură
1) Clasa
Clasele reprezinta tipuri referinta. O clasa poate sa mosteneasca o singura
clasa si poate implementa mai multe interfete.
Clasele pot contine constante, cimpuri, metode, proprietati, evenimente,
indexatori, operatori, constructori de instanta, destructori, constructori de
clasa, tipuri imbricate.
2) Structura
Structurile reprezinta tipuri de date asemanatoare claselor, cu principala
diferenta ca sunt tipuri valoare (o astfel de variabila va contine direct valoarea,
si nu o adresa de memorie).
O structura este automat derivata din System.ValueType, care la rindul ei este derivata din
System.Object ; de asemenea, este automat considerata sealed (nederivabila). Poate insa
sa implementeze una sau mai multe interfete. O structura poate sa contina declaratii de
constante, cimpuri, metode, proprietati, evenimente, indexatori, operatori, constructori,
constructori statici, tipuri imbricate. Nu poate contine destructor.
Asemanari:
Clase
Class AngajatClasa
{
Public tring nume;
Public string prenume;
Public string adresa;
}
AngajatClasaIon = new
AngajatClasa();
structuri
Descrierea tipului:
Struct AngajatStruct
{
Public string nume;
Public string prenume;
Public string adresa;
}
La nivelul creerii de obiecte
AngajatStructVasile = new
AngajatStrct();
Modificatorii de acces
Daca nu scrim nici un modificator se subintelege ca private.
Functii
Functii membre a Functii membri
membre clasei derivate din a clasei
a clasei clasa data din
derivate a
date
asamblajul dat
clasei date din
alte asamblaje
Private
+
Protected
+
+
+
Internal
+
+
Internal
+
+
+
protected
public
+
+
+
Functii
membri ai
clasei din
asamblaju dat
Functii
membere ale
clasei din alte
asamblaje
+
+
Polimorfismul
Polimorfismul este capacitatea unei entitati de a lua mai multe forme. In limbajul C#
polimorfismul este de 3 feluri: parametric, adhoc si de mostenire.
- Polimorfismul parametric
Este cea mai slaba forma de polimorfism, fiind regasita in majoritatea limbajelor. Prin
polimorfismul parametric se permite ca o implementare de functie sa poata prelucra orice numar
de parametri. Acest lucru se poate obtine prin folosirea in C# a unui parametru de tip params.
- Polimorfismul adhoc
Se mai numeste si supraincarcarea metodelor, mecanism prin care in cadrul unei clase se pot
scrie mai multe metode, avind acelasi nume, dar tipuri si numere diferite de parametri de apel.
Alegerea functiei care va fi apelata se va face la compilare, pe baza corespondentei intre tipurile
parametrilor de apel si tipurile parametrilor formali.
- Polimorfismul de mostenire
Este forma cea mai evoluata de polimorfism. Daca precedentele forme de polimorfism sunt
aplicabile fara a se pune problema de mostenire, in acest caz este necesar sa existe o ierarhie de
clase. Mecanismul se bazeaza pe faptul ca o clasa de baza defineste un tip care este compatibil
din punct de vedere al atribuirii cu orice tip derivate.
Indexatori
Functii member care permit accesu la date din cadru unui obiect dupa modelul unui tablou.
Accesu poate fi:
-pentru citire
- pentru scriere
-pentru citire si scriere
Acceptorii get/set
Constructori statici
Un constructor static este un membru care implementeaza actiunile cerute pentru initializara
unei clase. Declararea unui constructor static se face ca mai jos:
atributeopt modificator-de-constructor-static identificator( ) corp
Modificatorii de constructori statici se pot da sub forma:
- externopt static
- static externopt
Constructorii statici nu se mostenesc, nu se pot apela direct si nu se pot supraincarca. Un
constructor static se va executa cel mult o data intr-o aplicatie.
Se garanteaza faptul ca acest constructor se va apela inaintea primei creari a unei instante a clasei
respective sau inaintea primului acces la un membru static. Acest apel este nedeterminist,
necunoscinduse exact cind sau daca se va apela. Un astfel de constuctor nu are specificator de
acces si poate sa
acceseze doar membri statici.
Mostenire
Transmiterea de proprietati si functionalitati de la o seri de tipuri de date la alte tipuri de date se
numeste mostenire.
Mostenire singulara:
Tip de baza clasa
Tip de baza interface
De 2 tipuri:
1. mostenire de clasa(implementare)
2. mostenire de interfata
Restrictii:
- Structura ca tip de date nu poate fi tip de baza
- Structura nu poate fi obtinuta prin derivare(mostenire) de la o clasa
- Structura poate fi obtinuta prin mostenire de interfata
Mostenire multipla:
Tip de baza class
tip derivat class, interface
Tip de baza interface tip returnat interface
Ti de baza struct
tip derivate interface
Mostenire de implementare:
Modificatori de acces
la clasa de vaza
private
protected
public
Gradu de acces la
membrii clasei
derivate
Inaccesibil
Protected
public
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; // pentru med\toda
de retinere cu sleep
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
/* for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
Thread.Sleep(500); // metoda 2
de retinere a afisarii
//Timp(100000000); prima metoda
de retinere a afisarii
}
}
static void Timp(int i )
{
for (int j = 1; j < i; j++) ;
}*/
/*
long[,] tr2l;
tr2l = new long[3, 4];
for (int i = 0; i < 3; i++)
//for (int j = 0; j < 4; j++)
for (int j = 0; j < 4; )
// tr2l[i, j] =
long.Parse(Console.ReadLine());
//
if(long.TryParse(Console.ReadLine(), out
tr2l[i,j]))
// j++;
j=
(long.TryParse(Console.ReadLine(), out
tr2l[i, j])) ?
j += 1 : j;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4;j++)
{
Console.Write("{0,4}", tr2l[i,
j]);
}
Console.WriteLine();
}
Console.ReadLine();*/
long[][] tnr2l;
int[] ll = { 4, 2, 1, 3 };
tnr2l = new long[4][];
for (int i = 0; i < 4; i++)
{
tnr2l[i] = new long[ll[i]];
for (int j = 0; j < ll[i]; )
j=
(long.TryParse(Console.ReadLine(), out
tnr2l[i][j])) ?
j += 1 : j;
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < tnr2l[i].Length;
j++)
{
Console.Write("{0,4}",
tnr2l[i][j]);
}
Console.WriteLine();
}
Console.ReadLine();
/*
int[] t1i = new int[10];
int[,] tr2i = new int[4, 5];
int[][] tnr2i = new int[4][] { new
int[2], new int[3], new int[1], new int[4] };
Console.WriteLine(t1i.Length);
Console.WriteLine(tr2i.Length);
Console.WriteLine(tnr2i.Length);
Console.WriteLine(tr2i.GetLength(0));
Console.WriteLine(tr2i.GetLength(1));
Console.WriteLine(tnr2i[0].Length);
Console.WriteLine(tnr2i[1].Length);
Console.WriteLine(tnr2i[2].GetLength(0));
Console.WriteLine(tnr2i[3].Length);*/
}
}}
Modificatorii la mostenire
Modificatorii dicteaza comportamentul metodelor, proprietatilor in cadru claselor de baza si
derivate.
Modificator
Public
Private
Protected
Internal
Internal protected
New
Virtual
Override
Abstract
sealed
partial
Aplicabil
Orice tip si orice
membr
Orice tip si orice
membru
Membrilor clasei,
tipuri incluse
Membrilor clasei,
tipuri incluse
Functii membre
Descriere
Ofera accesibilitatea din orice punct al
programului
Ofera accesibilitatea doar in cadru clasei
Mostenire de interfete
Exista situatii cind metoda nu poate fi realiyata in interfata
[modif] interface nume Interfata
Descriere de signature pentru supraincarcare de operatori in cadru interfetelor nu exista.
Realizarea metodelor din interfete se face in tipuri derivate de la interfata: in clase si structure
Pot fi metode de standardizare utilizarea interfetelor
Nu se folosesc modificatori de acces in cadru interfetelor
Posibiliotati de mostenire
Clasa- interfata
Interfata-interfata metodele din interfata de baza nu vor fi realizate
Testarea la egalitate
In clasa object exista o serie de functii orientate la testarea la egalitate
Printre functii sunt statice si nestatice:
Static bool Reference Equals(object A,object B)
Compara adresele sau referintele obiectelor A,B
Daca nu aau valorea null return TRUE
Unul null, iar altul diferit de null Flase
null , null true/false
}
Public void Adaug (decimal s)// realizam
metodele(Metoda 1)
{
Suma+=s
}
Public bool Extrag(decimal s) //metoda 2
{
If (s<= suma)
{ suma-=s;
Return true;
}
Else
Return false;
}
Public decimal Bilant // metoda 3
{
Get
{
Return suma;
}
}
Public bool Transfer (IContbancar c,
decimal s)
{
Bool rez = Extrag(s);
If (rez == true)
c.Adaug(s);
return rez;
}
} // acoloada de la Mobias
Public class Program
{
Static void Main()
{
IContbancar cv;
ITransferbancar cm;
Cv= new Victoria(1000m);
Cm = new Mobias(2500m);
cv.Adaug(500m);
Console.WriteLine(cv.Bilant);
Console.WriteLine(cm.Bilant);
cm.Transfer(cv,500m);
Console.WriteLine(cv.Bilant);
Console.WriteLine(cm.Bilant);
} // acoloada main
} // acoloada class Program
} // acoloada namespace
Conversia datelor
-
Automata:
- La atribuire
- In expresii
La atribuire:
Tipu variabilei din stinga este diferit de tipu expresiei din dreapta
Tip 1 tipu expr 2
La expresii:
Cind tipu la expresia1 tipu expresiei 2
Nu trebuie sa fie pierderi de informatie
tip
Sbyte
Byte
Short
Ushort
Int
Uint
long
Ulong
Float
char
Conversie implicita
Short, int, long, float, double, decimal
Short, ushort, int, uint, long, ulong, float, double, decimal
int, long, float, double, decimal
int, uint, long, ulong, float, double, decimal
long, float, double, decimal
long, ulong, float, double, decimal
float, double, decimal
float, double, decimal
Double
Short, ushort, int, uint, long, ulong, float, double, decimal
Implicit;
Explicit.
Ex conversie
Using system;
Namespace Conversie
{
Enum curs
{
Lei = 13
Bani = 10;
}
Struct Dolari
{
Uint dolari;
Uint centi;
Public Dolari ( uintr d, uint c) // constructor
{
Dolari d;
Centi c;
}
Public static implicit operator
Float (Dolari d)
{
Return (dolari + centi/100.f);
}
Public static explicit operator Dolari (float s)
{
Return new Dolari ((uint)s, (s-(uint)s)*100);
}
Public override string ToString()
{
Return dolari +$+cent+c;
}
}
Struct Lei
{
Uint lei;
Uint lei
Public Lei(uint l, uint b)
{
Lei = l;
Bani = b;
}
Public static implicit operator Dolari (Lei
L)
{
Float c= curs.lei +curs.bani/100.f;
Float s = D;
Return (Lei) (s*c);
}
}
Class Program
{
Static void Main()
{
Lei L1 = new Lei (34,79);
Float suma;
Lei L2;
Suma L1;
L2 = (lei)suma;
Dolari d= L1;
Console.WriteLine(L2);
Console.WriteLine(d);
}
}
}
Supraincarcarea operatorilor
Using System;
Namespace SupraincarcareOp
{
Class Vector
{
Int x;
Int y;
Int z;
Public vector (int x, int y, int z)
{
This.x =x;
This.y = y;
This.z= z;
}
Public static int operator *
(Vector v1, vector v2)
{
Return v1.x*v2.x + v1.y*v2.y+v1.z*v2.z;
}
Public static Vector operator+
(Vector v1, vector v2)
{
Return new Vector(v1.x+v2.x , v1.y+v2.y,v1.z+v2.z);
}
Public static Vector operator * ( int c, vector v)
{
Return Vector(c*v.x;c*v.y,c*v.z);
}
Public override string ToString()
{
Return (+x.ToString()+,+y+,+z+);
}
}
Class Program
{
Static void Main()
{
Vector v1 = new Vector(3,-2,4);
Vector v2 = new Vector(7,12,-16);
Vector suma;
Suma = v1+v2;
Int produs = v1*v2;
Console.WriteLine(suma); //(10,10,-12)obtinem
Console.WriteLine(produs);
}
}
}
Constructii auxiliare
Marcaje
Descriere succrinta
<c>
Introducerea unei linii de
cod
<code>
Introducerea unui fragment
de cod
<exemplu>
<list >
<item>
<para>
<include>
<param>
<remarks>
<returns>
<see>
Permite introducerea unei
<seealso>
referinte din document dat
<summary> Descrierea succinta o putem
introduce
<values>
Exemplu de utilizare
///<c> int i;</c>
///<code>
///int i;
///i =100;
///</code>
///<exemplu>
///int i;
///i =100;
///</exemplu>
///<list>
///<item> A</item>
///<item> B</item>
///</list>
///<item> A</item>
///<item> B</item>
///<para>
///aliniat
/// de text
///</para>
///<include file-c:\\salut.xml
///path = doc/members/member// legatura dintre
noduri
///[@name=T:salutare.Program]/>
///<param name= n/>
///<remarks>
///descriere ampla
///</remarks>
///<returns>
///este returnat maximum
///</returns>
///<see cref = name/>
///<summary>
///descrierea rezumatului
///</summary>
///<values>
///este returnata numele persoanei
///</values>
Directivele preprocesorului
#defineXP - definirea
valoarea in C#
Posibilitati:
- Descriere de constant simbolice
- Compilare conditionata a codului
- De a schimba contorul liniilor
- De a evidential un fragment de cod
#undef numeConst -- intreruperea actiunii constantei respective
#line default - se introduce cind stergem niste linii, dar nu se doreste modificarea datelor
contorului
Liniilor
#line hidden -- ascunde fragmentul de cod pina la intilnirea directive #line