C# instructiune

.NET este un framework software care rulează pe sistemele de operare din gama Windows.
Acest framework include o librărie mare cu soluţii pentru problemele des întâlnite de programatori. Aici vorbim despre C#, J#, VB.NET, ASP.NET, DELPHI.NET etc.

C# instructiune

Postby sharky92 » 01 Aug 2011, 18:30

Buna ziua , imi poate explica cineva ce face mai exact instructiunea Foreach(a in b) ? M-am documentat dar nu am reusit sa o inteleg. Multumesc.
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby Payne » 01 Aug 2011, 18:54

Stii ce e un array nu? Daca da.

Face urmatorul lucru:

Pentru fiecare element a in array-ul b fa ceva cu el.

Ex
  1.  
  2.  
  3. List<int> lista = new List<int>();
  4. lista.Add(1);
  5. lista.Add(3);
  6. //Vezi ca trebuie sa specifici tipul lui 'a'.
  7. foreach(int a in b){
  8.    Console.Write(a.ToString());
  9. }
  10.  
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: C# instructiune

Postby sharky92 » 02 Aug 2011, 09:30

Da stiu ce e un array. Ce nu inteleg e cum poti afisa elementele vectorului daca variabila a este nula , a ia pe rand valoarea fiecarui element din vectorul b si il afiseaza ?
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby Payne » 02 Aug 2011, 10:29

Variabila nu e nula.

Acel loop ii atribuie acelei variabile fiecare element in parte din acel array.

In exemplul anterior:
  1.  
  2. List<int> lista = new List<int>();
  3. lista.Add(1);
  4. lista.Add(3);
  5. //Vezi ca trebuie sa specifici tipul lui 'a'.
  6. //Output 1 3
  7. foreach(int a in b){
  8.    Console.Write(a.ToString() + " ");
  9. }
  10.  

Cand se executa prima oara loop-ul, variabila >> a << are valoarea 1 apoi se executa din nou loop-ul si >> a << are valoarea 3. Si asa pana se ajunge la sfarsitul array-ului.
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: C# instructiune

Postby sharky92 » 02 Aug 2011, 12:04

Da , acum am inteles . Ms Payne , nu stiam exact ce se intampla intre variabila si array.


L.E. (-- 02 Aug 2011, 11:04 --)

O alta nelamurire este cuvantul this , la ce se refera ? , de multe ori am vazut ca se foloseste pt a inchide o fereastra " this.close()" . Multumesc anticipat :D .
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby Payne » 02 Aug 2011, 12:09

Atunci cand esti intr-o clasa si vrei sa acesezi o variabila sau o functie (nu statice), folosesti cuvantul this care inseamna tradus in romana aceasta.(aceasta clasa).

Ex.
  1.  
  2. class ClasaMea{
  3.      int b = 0;
  4.      void DoThing(){
  5.         MessageBox.Show('WOW');
  6.      }
  7.      void DoThing2(){
  8.        this.DoThing();
  9.        this.b = 0;  
  10.      }
  11. }
  12.  
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: C# instructiune

Postby sharky92 » 02 Aug 2011, 12:27

Deci prim cuvantul this poti avea acces la datele de instanta ale clasei in care te afli :D ? , in loc sa le apelezi prin nume_obiect.data_membru , le apelezi prin this.data_membru . Dar in cazul de mai sus variabila b si cele 2 metode pot fi apelate in interiorul clasei fara cuvantul cheie this .
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby Payne » 02 Aug 2011, 12:38

Da. Se pot apela si fara cuvantul cheie this.

Dar de exemplu cand vrei sa folosesti ca parametru clasa actuala folosesti cuvantul this ca pe o variabla.
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: C# instructiune

Postby sharky92 » 02 Aug 2011, 13:54

Imi poti da te rog un exemplu in care transmitem clasa actuala ca parametru ?
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby Payne » 02 Aug 2011, 14:11

  1.  
  2.      class Foo
  3.      {
  4.         public void FaCevaCuClasaBar(Bar instanta)
  5.         {
  6.             instanta.Arata("hello");
  7.         }
  8.      }
  9.      class Bar{
  10.         public void ArataMesaj(){
  11.             Foo a = new Foo();
  12.             a.FaCevaCuClasaBar(this);
  13.         }
  14.         public void Arata(string message){
  15.             MessageBox.Show(message);
  16.         }
  17.      }  
  18.      void Main(){
  19.         Bar a = new Bar();
  20.         a.ArataMesaj();
  21.      }
  22.  
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: C# instructiune

Postby sharky92 » 02 Aug 2011, 16:06

Ok , ms Payne , am inteles in mare ce face cuvantul cheie this . Ma voi documenta in continuare.


L.E. (-- 02 Aug 2011, 14:08 --)

  1. namespace WindowsFormsApplication1
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.            
  9.         }
  10.  
  11.         private void button1_Click(object sender, EventArgs e)
  12.         {
  13.             Graphics g ;
  14.             Form1 form=new Form1();
  15.            
  16.             g = form.CreateGraphics();  /* apelam CreateGraphics din clasa form*/
  17.             g = this.CreateGraphics(); /* this inlocuieste clasa form*/
  18.  
  19.         }
  20.        
  21.     }
  22. }


Din primul si al doilea apel rezulta ca metoda CreateGraphics este o metoda membru a clasei Form1 deoarece este apelata prin cuvantul cheie this sau prin obiectul form. Problema este ca nu o vad declarata nicaieri in clasa Form1.
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby smith » 02 Aug 2011, 16:32

E vorba de moștenire aici. Dacă nu ai auzit despre moștenire, ar trebui să înveți bazele OOP înainte de a încerca să înțelegi keyword-ul this.
La linia asta aflăm că clasa Form1 moștenește clasa Form.
  1. public partial class Form1 : Form


Asta înseamnă că toate metodele/membrii din Form vor fi disponibile și în Form1 (la care îi mai adaugi tu niște chestii sau modifici unele lucruri moștenite din Form). În cazul acesta metodele nu se "văd" dar există.
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: C# instructiune

Postby sharky92 » 02 Aug 2011, 16:42

OK , deci CreateGraphics este o metoda a clasei Form si este mostenita si in Form1. Imi poti recomanda o carte in care sa fie explicate principiile programarii OOP ? Multumesc.
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby smith » 02 Aug 2011, 16:53

Păi C# fiind un limbaj multi-paradigmă, acceptă și paradigma OOP. Cam orice carte de C# ar trebui să cuprindă aspectele astea. Nu știu ce să recomand, deoarece eu nu știu C# - poate payne poate să te ajute aici :P

Poți încerca tutorialul acesta despre obiecte. Știu că e la Java, dar principiile sunt la fel - până la urmă C# s-a inspirat și din Java. Cred că și codul din tutorial ar fi echivalent cu cel din C# :))

O singură chestie se leagă de java în tot tutorialul, deci restul e destul de generic.
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: C# instructiune

Postby Payne » 02 Aug 2011, 17:37

Cam greu sa gasesti un tutorial in romana despre obiecte in C#, dar tutorialul dat de smith explica chiar foarte bine OOP si cum el zice e generic.
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: C# instructiune

Postby sharky92 » 02 Aug 2011, 21:03

Ok , va multumesc pentru sfaturi. Am gasit intre timp o carte , spre mirarea mea chiar in limba romana care abordeaza acest subiect :D.
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby sharky92 » 04 Aug 2011, 13:17

  1.  
  2.  private void button1_Click(object sender, EventArgs e)
  3.         {
  4.             Graphics g;
  5.             Pen p = new Pen(Color.DarkOliveGreen);
  6.            
  7.   g = this.CreateGraphics();
  8.   g.DrawLine(new Pen(Color.DarkOliveGreen), new Point(10, 10), new Point(10, 500));
  9.          }
  10.  


As dori sa va pun o intrebare legata de parametrii cu care se apeleaza metoda membra a obiectului g , DrawLine. In loc sa fie apelata cu ajutorul unor obiecte de tip Pen si Point (de exemplu in loc de new Pen(Color.DarkOliverGreen) sa punem obiectul p definit mai sus), se apeleaza direct prin operatorul new si Tip. Va spun ce am inteles eu din asta si as vrea sa ma aprobati sau sa ma contraziceti in caz ca gresesc. Prin operatorul new apelam constructorul clasei Pen care returneaza un obiect de tip Pen cu care este apelata functia.
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: C# instructiune

Postby morpheus » 04 Aug 2011, 22:13

Tehnic nu e corect ceea ce presupui.
Constructorul nu returneaza nimic.
Operatorul new face doua lucruri:
1. Aloca memorie pe heap, pentru obiectul pe care vrei sa-l construiesti.
2. Apeleaza constructorul corespunzator al clasei. Constructorul initializeaza obiectul.
Practic il construieste in zona de memorie alocata la punctul 1.

In continuare, paramentrii in functia DrawLine() sunt pasati prin valoare, se copiaza referintele la obiecte pe stiva functiei DrawLine().
0,0p / 0 votes
User avatar
morpheus
Word
 
Joined: 30 Dec 2009
Location: Bucharest, Romania
Status: 54.84

Re: C# instructiune

Postby Payne » 05 Aug 2011, 12:51

Eu pur si simplu nu am inteles intrebarea.

Codul dat face urmatoarea chestie.

1.Declaram o variabila de tip Graphics si fara a avea nici o valoare.
2. Creaza un obiect de tip Pen si il salveaza in memorie, iar folosind parametrul Color.DarkOliveGreen ii dam o culoarea acelui "stilou".
3. Ii atribuim variabilei Graphics ce tradus mai mult sau mai putin e sistemul e grafica a unui control si unde avem diferite functii pentru a desena pe el. In cazul tau e sistemul de grafice al form-ului.
4. Din acel sistem de grafice folosim functia DrawLine care deseneaza o line pe acel sistem de grafice, dandui ca parametri stiloul(Pen) cu care se scrie, punctul de unde se incepe(Point cu x si y) si punctul unde termina.

Problema e ca tu aloci de 2 ori memorie pentru acelasi lucru.

Aici: Pen p = new Pen(Color.DarkOliveGreen);
si aici: g.DrawLine(new Pen(Color.DarkOliveGreen)

Ori declari variabila inainte ori o declari direct ca parametru(se mai numeste si variabila anonima deoarece nu are un nume)

Ex.
Ori
  1.  
  2. Pen p = new Pen(Color.DarkOliveGreen);
  3. g.DrawLine(p, new Point(10, 10), new Point(10, 500));
  4.  


Ori

  1.  g.DrawLine(new Pen(Color.DarkOliveGreen), new Point(10, 10), new Point(10, 500));
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: C# instructiune

Postby sharky92 » 05 Aug 2011, 14:51

Ok , deci operatorul new creaza un obiect anonim de tip pen direct ca parametru al functie DrawLine.
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Next

Return to .NET

Who is online

Users browsing this forum: No registered users and 0 guests