24. Elementele componente ale unei clase Cazul general: 1) câmpuri; 2) metode; 3) clase şi interfeţe încuibate Oricare dintre elemente pot lipsi class Persoana { public String CNP; // cod numeric personal public String nume; // numele persoanei public Persoana pereche; // sotul/sotiei public static long populatie = 0; public Persoana( String nume, String CNP, Persoana peer) { this .nume = nume; this .CNP = CNP; pereche = peer; //!!! populatie++; } public String getNume() { return nume; } public bool checkCNP() { return true ; // nu e obligatoriu sa fie true :) } }
25. Campuri Variabile de exemplar şi variabile de clasă Iniţializatori : constante sau expresii de tip corespunzător cu al câmpului, stabilesc valoarea iniţială Exemple: double sapte = 3.5 * 2; // expresie constanta double altSapte = sapte; // expresie cu alt camp al obiectului double sin45 = Math.sin(Math.PI/4); // apel de metoda double expr = sapte + Math.sqrt(sin45); //expresie combinata Tipuri predefinite Tipuri predefinite non-obiecte : numerice, char, boolean Tipuri numerice: Byte, short, int, long, float, double Char :reprezentare Unicode câmpuri constante : declarate cu final câmpurile cu tip clasă conţin referinţe !!
43. Metode (4) In cazul valorilor elementare: class ValElem { public static void main( String [] args) { double a = 2.3, b = 4.5; Console .WriteLine( " a initial = " + a); suma(a, b); Console .WriteLine( " a final = " + a); } public static void suma( double x, double y) { x = x + y; Console .WriteLine( "arg 1 in metoda = " +x); } } In cazul referintelor: class ValRef { public static void main( String [] args) { Persoana pers = new Persoana (); pers.CNP = "2780609364760" ; pers.nume = "Maria Ionescu" ; Console .WriteLine( "Nume initial: " + pers.nume); casatorie(pers); Console .WriteLine( "Nume final: " + pers.nume); } public static void casatorie( Persoana refp) { refp.nume = "Maria Popescu" ; refp = null ; } }
44. Metode (5) casatorie() main() Maria IONESCU casatorie() main() Maria IONESCU before after ? OBIECT cnp, nume, pereche pers refp OBIECT cnp, nume, pereche pers refp
45.
46. În C# param. obiecte nu se transm. prin ref., se transm. prin valoare referintei la obiecte .
47. Param. decl. final nu se pot modif. în codul metodei.
48. metode cu nr. variabil de param. : ultimul param. specif. dă tipul argum. nespecificate public void IntParams( string Message, params int [] p) { Console .WriteLine(Message); for ( int i = 0; i < p.Length; i++) { Console .WriteLine(p[i]); } }
49.
50.
51. protected – accesibil in metodele clasei curente si acelor drivate din ea si in namespace-ul curent;
52. public – accesibil oriunde este acesibila clasa;
84. Numele între acolade: constantele (exemplarele) enumerării. Numai unul din acestea poate apare în orice utilizare a enumerării -> siguranţa tipurilor
86. Tablouri (2) Volume myVolume = Volume .Low; switch (myVolume) { case Volume .Low: Console .WriteLine( "The volume has been turned Down." ); break ; case Volume .Medium: Console .WriteLine( "The volume is in the middle." ); break ; case Volume .High: Console .WriteLine( "The volume has been turned up." ); break ; }
87. EnumTricks (1) // declares the enum public enum Volume : byte { Low = 1, Medium, High } Dorim sa implementam un mecanism care sa permita conversia bidirectionala intre un nr. intreg si un element al unei enumerari.
88. EnumTricks (2) class Enumtricks { static void Main( string [] args){ Enumtricks enumtricks = new Enumtricks (); // demonstrates explicit cast // of int to Volume enumtricks.GetEnumFromUser(); // iterate through Volume enum by name enumtricks.ListEnumMembersByName(); // iterate through Volume enum by value enumtricks.ListEnumMembersByValue(); Console .ReadLine(); } /*...*/
89. EnumTricks (3) // get value user provided string volString = Console .ReadLine(); int volInt = Int32 .Parse(volString); // perform explicit cast from // int to Volume enum type Volume myVolume = ( Volume )volInt; Console .WriteLine( "Volume Enum Members by Name:" ); // get a list of member names from Volume enum, // figure out the numeric value, and display foreach(string volume in Enum .GetNames(typeof ( Volume ))){ Console .WriteLine( "Volume Member: {0} Value: {1}" ,volume,(byte) Enum .Parse(typeof( Volume ), volume)); }
90. EnumTricks (4) // get all values (numeric values) from the Volume // enum type, figure out member name, and display foreach ( byte val in Enum .GetValues( typeof ( Volume ))) { Console .WriteLine( "Volume Value: {0} Member: {1}" , val, Enum .GetName( typeof ( Volume ), val)); } Acest exemplu a fost preluat de la: http://www.csharp-station.com/Tutorials/Lesson17.aspx
91.
92. Există un singur cod al clasei Stiva . Compilatorul poate verifica dacă operaţiile cu obiecte sunt corecte, pentru că are info de tip complete class Nod <S, D> { // declaratii de campuri // declaratii de metode } Nod < String , Persoana >nod1= new Nod < String , Persoana >();
93.
94. GENÉRIC, -Ă, generici, -ce, adj. Care aparţine unei categorii întregi, privitor la o categorie întreagă (de fiinţe, obiecte , fenomene); care cuprinde toate cazurile de acelaşi fel. ♦ (Substantivat, n.) Partea de la începutul sau de la sfârşitul unui film, în care sunt indicate numele principalilor realizatori ai filmului respectiv. – Din fr. générique. [DexOnline]
96. O clasă generică declară una sau mai multe variabile de tip , între paranteze unghiulare după numele clasei.
97. Clase si metode generice Metode generice Variabilele de tip ale unei clase generice se fol. la decl. de câmpuri şi def. de metode ale clasei; public bool push(E elem) { if (top == 100) return false ; tab[top++] = elem; return true ; } public E pop() { if (top == 0) return default (E); ; return ((E)tab[--top]); } public void print() { for ( int i = top - 1; i >= 0; i--) { Console .Out.WriteLine((E)tab[i]); } }