PAW C# 1

June 7, 2020 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download PAW C# 1...

Description

Tipuri referentiale si tipuri valorice 1.Metodele si variabilele se definesc doar in clase si structuri. 2.Variabilele statice sunt initializate in constructori declarati static (nu instantiaza obiecte, doar aloca si initializeaza membrii statici) 3.Functiile statice pot fi apelate fara a declara obiecte ale clasei

Diferenta intre tipuri valorice (manipulate direct prin nume) si tipuri referentiale (alocate dinamic) using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace ConsoleApplication17 { class Class1 { public int Val=0; } struct Struct1 { public int Val; } class Test { static void Main() { //tip valoric, manipulat prin nume //stocat pe stiva Struct1 tv1; tv1.Val = 0; //se face copierea continutului din membrul drept peste cel stang Struct1 tv2 = tv1; tv2.Val = 123; //tip referential, manipulate prin referinta //la fel ca un pointer, doar ca se derefera automat, referintele pot fi definite nule si pot fi incarcate cu obiecte generate cu new sau referinte //de obiecte deja existente //tipurile referentiale pot fi instantiate numai cu new , sunt stocate numai in heap Class1 tr1 = new Class1(); //tr2 refera primul obiect ,orice modificare actioneaza asupra ambelor obiecte, nu se face o copiere intre obiecte Class1 tr2 = tr1; tr2.Val = 123;

//tipul int are o metoda prin care se face conversia ToString() string txt = 110.ToString(); //doua expresii de tip object sunt considerate egale daca ambele refera aceleasi obiect, sau daca ambele sunt null

Console.WriteLine("Valoric: {0}, {1} ", tv1.Val, tv2.Val); Console.WriteLine("Referential: {0}, {1} ", tr1.Val, tr2.Val); Console.Read(); } } }

Siruri de caractere using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace ConsoleApplication17 { class Test { static void Main() {

\r =return \n=newline

string s1 = "text"; string text = "linia 1 \r\n linia2"; string fis1="c:\\stud\\CS\\siruri\\fisier.txt"; //se foloseste @ ca o o prefixare pentru netratarea evenimentelor de escape string fis2=@"c:\stud\CS\siruri\fisier.txt"; //copie la indigo

char c=s1[0]; s1+=text; string x="sir", y="sir",z; z=x; if(x==y) Console.WriteLine("Acelasi"); if(x==z) Console.WriteLine("Acelasi"); Console.WriteLine(text); Console.Read(); } } }

Definirea noilor tipuri valorice prin enum si struct Definirea noilor tipuri referentiale prin class, interface si delegate

using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace ConsoleApplication17 {

public enum Color { Rosu, Albastru, Verde } public struct Point { public int x, y; }

public interface IBaza { void F(); } public interface IDerivata : IBaza { void G(); } public class A { protected virtual void H() { Console.WriteLine("A.H"); } } public class B : A, IDerivata { public void F() { Console.WriteLine("B.F, implementare IDerivata.F"); } public void G() { Console.WriteLine("B.G, implementare IDerivata.G"); } protected override void H() { Console.WriteLine("B.H, override pe A.H"); } public delegate void DelegatVid(); //trecerea de la valoare in referinta si invers se face prin inpachetare si despachetare (boxing, unboxing) class Test { static void Main() { int i = 123; object o = i; //boxing int j = (int)o; //unboxing //conversie in string Console.WriteLine(3.ToString()); Console.Read(); }

} } }

Vectori si colectii

// tip[] nume pt vectori, dimensiunea se da la executie using System; class Test { static void Main(string[] args) { //masiv bidimensional int[,] mb1 = new int[2, 3]; //alocare completa mb1[1, 2] = 10; int[,] mb2 = { { 10, 11 }, { 20, 21 }, { 30, 31 } }; //dimensiunile sunt deduse din lista de initializatori

//declaratie cu dubla indexare, posibila doar in scara //se precizeaza doar nr de linii, nu si dimensiunea lor //aloca doar referintele de linie int[][] ms1 = new int[3][]; ms1[0] = new int[3]; //alocare linie 1 ms1[1] = new int[7]; //alocare linie 2 cu alta dim ms1[2] = new int[2]; //la copierea unui masiv se copiaza doar referinta nu si continutul int[][] ms2 = new int[3][]; ms2[1] = new int[7]; Console.Write("\n" + ms2[1][3]); ms2[1] = new int[7]; ms2 = ms1; //se copiaza referinte, nu elemente ms1[1][3] = 13; Console.Read(); } }

Vectori de tipuri valorice int vv=new int[4];

0

0

0

0

Vectori de obiecte Persoana p1=new Persoana[4];

null

null

null

null

Persoana p1=new Persoana[4]{p1,p2,p3,p4}

@

p1

@

p2

@

@

p3

p4

Vectorii de tipuri valorice tin valori, adica numele vectorului este referinta. Vectorii de obiecte tin referinte la obiecte, numele vectorului este referinta, iar la capatul referintei sunt alte referinte. // tip[] nume pt vectori, dimensiunea se da la executie using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

class Pers { public int Marca; public string Nume; //constructor cu parametru public Pers(int m,string n) { Marca = m; Nume = n; } } class Test { static void Main(string[] args) { Pers p1,p2; //nu genereaza o instanta, doar se declara o referinta nula, trebuie incarcata ulterior cu adresa unei //instante deja existente p1 = new Pers(1, "Unu"); p2 = p1; //vector de persoane (vector de obiecte) Pers[] vp; //nu instantiaza nimic vp = new Pers[4]; //e instantiat //in fiecare element avem o referinta => ii alocam memorie int[] vi = { 1, 2, 3, 4 }; vp[0] = new Pers(0, "Zero"); vp[1] = p1; Console.Write("{0}-{1} \n,\n", vp[1].Marca, vp[1].Nume); vp[2] = new Pers(2, "Doi"); //parcurgere a vectorului foreach (Pers crt in vp) Console.Write("{0}-{1} \n", crt.Marca, crt.Nume);

Console.Read(); } }

Colectii

 

Se aloca element cu element, sunt redimensionabile dinamic Sunt de tip object

Tipuri de colectii: 1. 2. 3. 4.

ArrayList (lista)  using System.Collections SortedList (map) Queue (coada) Stack (stiva)

Pers.cs using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Colectii { class Pers { public int Marca; public string Nume; public Pers(int m, string n) { Marca = m; Nume = n; } } }

Pers marca

nume

vector

Vect[0]

Vect[1]

Vect[2]

@Pers

@Pers

@Pers

m

m

m

n

n

n

using using using using using

System; System.Collections; System.Linq; System.Text; System.Threading.Tasks;

namespace Colectii { class Program { static void Main(string[] args) { //-----------------------------------------// // Tipuri de COLECTII - Declarari // //-----------------------------------------// ArrayList lista; //lista cu val null SortedList slista; //map Queue coada; //coada Stack stiva; //stiva //vector de persoane Pers[] vect = new Pers[3]; vect[0] = new Pers(0, "Zero"); //se apeleaza constructorul din clasa Pers si se asociaza marca si numele cu valorile impuse vect[1] = new Pers(1, "Unu"); vect[2] = new Pers(2, "Doi"); lista = new ArrayList(); //initializare //se foloseste metoda AddRange() pentru a popula o lista pornind de la un vector lista.AddRange(vect); //se adauga valorile vectorului de Persoane //lista.Add(new Pers(0,"Zero")); //lista.Add(new Pers(1, "Unu")); //lista.Add(new Pers(2,"Doi")); //adresare indexata lista[1] = lista[2]; //refera aceeasi zona de memorie vect[1] = vect[2]; //in cazul listelor e nevoie de operatorul cast //modificare valori element 2 din lista ((Pers)lista[1]).Nume = "Nou"; vect[1].Nume = "Nou"; //la vectori nu este nevoie de conversie, pt ca vectorul este deja de tip Pers //parcurgem lista de persoane foreach (Pers crt in lista) Console.WriteLine("{0} - {1} \t", crt.Marca, crt.Nume); Console.WriteLine("\n"); //parcurgem vectorul de persoane foreach (Pers crt in vect) Console.WriteLine("{0} - {1} \t", crt.Marca, crt.Nume); Console.Read(); } } }

lista[1] = lista[2];

Valoare (nou)



lista[1].Nume = „Nou”

lista lista[2].Nume = „Nou” @ lista[0] lista[1] lista[2]

Proprietati (get, set)

Clasa Produs.cs using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Proprietati { class Produs { string den; string um; float pret; int stoc; public Produs() {

stoc=0; } //proprietati pt atributul stoc public int Stoc { get { return stoc; } set { if(value > 0) stoc = value; } } } }

using using using using

System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Proprietati { class Program { static void Main(string[] args) { Produs p1 = new Produs(); p1.Stoc = 100; //se apeleaza proprietatea set Console.WriteLine("\nStocul este " + p1.Stoc); //se apeleaza proprietatea get pt afisarea stocului } } }

Delegari si evenimente Sa se defineasca si sa se utilizeze un delegat care sa permita gestionarea metodelor de vanzare si cumparare, en gros si en detail, in cadrul unor activitati comerciale desfasurate de o firma. using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

In afara clasei pentru ca este un tip

namespace Delegari { delegate void PersDelegat(Produs p, double suma); class Produs { string string public public

den; um; double pret; int stoc;

public Produs() { stoc = 0; pret = 1.0; } } }

using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Delegari { class ActivComerciale { public void cumpara_en_detail(Produs p, double suma) { p.stoc += (int)(suma / p.pret); Console.WriteLine("\nCumpara en detail de " + suma + " lei"); } public void cumpara_en_gros(Produs p, double suma) { p.stoc += (int)(suma / (p.pret * 0.9)); Console.WriteLine("\nCumpara en gros de " + suma + " lei"); } public void vinde(Produs p, double suma) { p.stoc -= (int)(suma / p.pret); Console.WriteLine("\nVinde in valoare de " + suma); } }

}

using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Delegari { class Program { static void Main(string[] args) { Produs prod1 = new Produs(); ActivComerciale a = new ActivComerciale(); PersDelegat Popescu = new PersDelegat(a.cumpara_en_detail); Popescu(prod1, 1000.0); Console.WriteLine("\nStocul este " + prod1.stoc + " buc"); Popescu = new PersDelegat(a.cumpara_en_gros); Popescu(prod1, 1000.0); Console.WriteLine("\nStocul este " + prod1.stoc + " buc\n\n"); } } }

Interfete using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Interfete {

interface IMiscare { void start(); void stop(); void inainte(int distanta, int viteza); void inapoi(int distanta, int viteza); bool stanga(int unghi); bool dreapta(int unghi); } }

using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Interfete { class Vehicul:IMiscare { string tip; public void start() { Console.WriteLine("\nStart vehicul"); } public void stop() { Console.WriteLine("\nStop vehicul"); } public void inainte(int distanta, int viteza) { Console.WriteLine("\nVehicul {0} m inainte cu {1} km/h", distanta, viteza); } public void inapoi(int distanta, { Console.WriteLine("\nVehicul } public bool stanga(int unghi) { Console.WriteLine("\nVehicul return true; } public bool dreapta(int unghi) { Console.WriteLine("\nVehicul return true; } } }

using using using using

System; System.Collections.Generic; System.Linq; System.Text;

int viteza) {0} m inapoi cu {1} km/h", distanta, viteza);

stanga cu {0} grade", unghi);

dreapta cu {0} grade", unghi);

using System.Threading.Tasks; namespace Interfete { class Program { static void Main(string[] args) { Vehicul v = new Vehicul(); v.start(); v.stanga(20); v.inainte(10, 100); v.stop(); Console.Read(); } } }

Structuri de date dinamice using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Lista { class nod { object inf; //informatia utila din nod public nod next; //adresa catre urmatorul nod public nod(object k) {

inf = k; next = null; } public nod (object k, nod urm) { inf = k; next = urm; } //proprietate pt a obtine/modifica informatia utila public object informatia { get { return inf; } set { inf = value; } } } }

using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Lista { class lista { //capul listei = referinta la primul element al listei protected Lista.nod cap; //NR DE NODURI din lista protected uint nrn; public lista() { cap = null; nrn = 0; } public void Adaugare(object k) { if (cap == null) cap = new Lista.nod(k); else { Lista.nod aux = cap; while (aux.next != null) aux = aux.next; aux.next = new Lista.nod(k); } nrn++; } public void Afisare() { Lista.nod aux = cap; while(aux!=null) { Console.Write("

{0}

", aux.informatia);

aux = aux.next; } } public uint NrNoduri { get { return nrn; } } } }

using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks;

namespace Lista { class Program { static void Main(string[] args) { Lista.lista l = new Lista.lista(); l.Adaugare(20); l.Adaugare(90); l.Adaugare(45); l.Afisare(); } } }

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF