Tartalomjegyzék

c# (c-sharp)

Paradigmák:

A Microsoft által kifejezetten a .NET framework-re fejlesztett ECMA és ISO szabványosított erősen típusos teljesen objektumorientált1) programozási nyelve.

A nyelv struktúrájának bemutatása:

1. using System;
2. namespace SajátNévterem {
3.   class PéldaOsztály {
4.     public static void Main()
5.     {
6.       Console.WriteLine("Hello VMG!");
7.     }
8.   }
9. }

A C# program objektumok, struktúrák, adattípusok definícióniak halmazából áll. Az objektumorientált nyelvek egysegbezaras elvét az osztalyok valósítják meg. Egy forrásfájlban több osztály is definiálható, és egy osztály több állományba is szétbontható (.NET 2.0 partial_class). Az osztályok állapotaikat az adattagokon őrzik és metodusaikkal változtatják.

A .NET keretrendszerben minden futtatható file-nak rendelkeznie kell egy belépési ponttal (4.sor). C#-ban a belépési pont tulajdonságai:

Egy alkalmazás a Main() metódusból kilépésig fut. (7.sor)

Az osztályokat (3.sor) (és egyéb adattípusokat) névterekbe lehet szervezni (2.sor). Egy névtör több file-t, és egy forrás több névteret is lefedhet. A névteret (a névtéren belüli osztályok egyszerűbb használatához) az adott programforráson belül a using kulcsszóval lehet igénybe venni. (Példánkban a Console osztály WriteLine() metódusához az 1. sorban szereplő utasítás.) A névterek using kulcsóval való használatba vétele nem kötelező, közvetlen hivatkozhatunk is rá: System.Console.WriteLine(„helló c# világ!”);

Adatszerkezetek

adatszerkezetek2)

Műveletek

Értékadás

Jobbról balra történik, és más nyelvekhez hasonlóan a bal oldalon egyéb művelet nem lehet.

   int i, j, k;
   i = j = k = 10; 	//k legyen 10, j legyen k (ami 10), i legyen j

Aritmetikai műveletek

   i = j + 10 - k + 1;  // 11
   k = 3 * j;           // 30
   i++;                 // 12
   --k;                 // 29

Összetett műveletek

Egy aritmetikai és az értékadó (egyenlőségjel) operátorból képezhető. A számítási szabály így változó <aritmetikai operátor>= változóÉrték jelentése változó = változó + változóÉrték

+=, -=, *=, /=, %=

   j -= 3;              // j = j - 3;
   k %= 2;              // k = k % 2;

Összehasonlító, viszonyító műveletek

relációs operátor: <, > ==, !=, >=, ⇐ eredményük: {true, false} általában az elágazásokban használjuk (feltételes log. műveletek)

Feltételes logikai műveletek

Az egyetlen háromváltozós művelet a feltételes művelet.

	int x = 121243;
	//[változó] = ( [feltétel] ) ? [érték, ha igen...] : [érték,ha nem...];
	bool páros = ( x % 2 == 0 ) ? true : false ;

Típusműveletek (as,is)

Műveleti sorrend

A műveleti sorrend kötött

 1. elsődleges: ().[] x++ x-- new typeof sizeof checked unchecked
 2. egyváltozós
 3. multiplikatív
 4. additív
 5. eltolási
 6. viszonyító
 7. egyenlőségi
 8. logikai és
 9. logikai xor
10. logikai or
11. feltételes and
12. feltételes or
13. feltételes művelet
14. értékadás

Egymásbaalakíthatóság, hatókörök

Hatókör: egy változó jellemzően csak egy {} blokkon belül él.

  int x;
  {
     int y = 0;
     y++;
     x = y;
  }
  x++;
  // viszont itt y-ra már nem hivatkozhatunk
 
  for(int i = 0; i<10; i++) 
  {
     // i a ciklusmagon belül elérhető, de
  }
  // a cikluson kívül már nem, a GC fel fogja szabadítani az általa foglalt memóriát.

ez a szakasz hiányos implicit konvertálás: célszerűen bővebb típusra, ne dobjon kivételt, különben explicit konverzió: ez a type cast ehelyett használható az as operátor. Itt sikertelen konverzió esetén nem kapunk kivételt, hanem egyszerűen nulla értéket.

A konverzió sikeressége előre is eldönthető, az is operátor használatával. Ha típuskompatibilis, akkor igaz, ha nem hamis értéket kapunk.

Itt jegyzünk meg két fontos dolgot:

Program menetének szabályozása

Vezérlési szerkezetek

szelekció, elágazás((szokásos elnevezés még: kiválasztás))

a program menete a megadott feltételeket teljesítő ágban fut tovább

iteráció (bejárások)

Más néven ciklusban, vagy ismétlési szerkezetben egy feltételtől függően végzünk utasítássorozatokat. Az ismétlendők alkotják a ciklusmagot.

  1. elöltesztelős ciklus (pl. eldöntési tétel)
      while ( futási feltétel ) 
      {
         //ciklusmag
      }
  2. hátultesztelős ciklus (Figyelem! c#-ban az elöltesztelős ciklussal egyezően a futási feltételt adjuk meg a blokk végén.): Olyan esetben használjuk, ahol a ciklusmagnak egyszer biztosan le kell futnia.
      do
      {
         //ciklusmag
      } while ( futási feltétel ) ;
  3. for ciklus: sokszor tömbök bejárására használjuk
      for ( [ciklusváltozók inicializálása] ; [futási feltétel] ; [ciklusváltozók módosítása] ) 
      {
     
      }
  4. foreach ciklus: legtöbbször gyűjtemények (és toembök)3) bejárására használjuk
      foreach ( változóTípus változóNév in gyűjtemény ) 
      {
     
      }

Példa:

  int[] Tömb = new int[2] { 2,3 };
  int i = 0;
  while ( i < Tömb.Length && !(Tömb[i]%7==0) ) 
      ++i;
  string kiír = (i<Tömb.Length) ? "van 7-tel osztható elem" : "hamis feltétel";
  System.Console.WriteLine(kiír);

kivételkezelés

többszálúság

1)
Minden őse a System.Object osztály
2)
Alapfogalmak: adat konstans változó típus Referencia vs. Érték /.NET típusok és megfeleltetések/ struktura, osztály (partial class .NET 2.0) tömb, láncolt lista (generikus osztályok .NET 2.0)
3)
IEnumerable Interface-t megvalósítják