A C# programozási nyelv

Alprogramok, modulok

Szintaxis

Ugyanúgy, mint c++ -ban, csak függvények vannak. A void visszatérési érték használatával tudunk eljárást készíteni.

Paraméterátadás

Amikor argumentumot adunk át egy metódusnak a kapcsolódó paraméter az argumentum másolatával inicializálódik. Ez minden esetben így történik, akkor is, ha a paraméter érték típusú és akkor is, ha referencia típusú. Így nem lehetséges, hogy a paraméter változása módosítsa az átadott argumentum értékét. Ha a paraméter referencia típusú, a paraméter változása megváltoztatja az adatot, amelyre a referencia mutat. Annak ellenére, hogy a hivatkozott adat változott a paraméter maga nem változott. Azaz lehetséges az objektumot módosítani, amelyre a referencia típusú argumentum, hivatkozott, de a referenciát nem lehet módosítani, például egy másik objektumra átállítani. A legtöbb esetben ez a garancia hasznos és csökkenti a programhibák számát. Időnként azonban szükség lehet olyan metódusra, amely az argumentumot is módosítja. A C# a ref és az out kulcsszavak segítségével nyújt erre lehetőséget.

3 fajta paraméter átadás van:

Érték: (nincs kulcs szó)

public int ByVal(int x){x=x+x; return x;}

Hivatkozás: ref

Ha egy paraméter elé kiírjuk a ref kulcsszót, a paraméter az aktuális paraméter álneve lesz, vagyis hivatkozik rá, nem pedig az argumentum másolata. Ha ref paramétert használjuk, akármit is teszünk a paraméterrel, az eredeti argumentumot is változtatja, mivel a paraméter és az argumentum ugyanarra az objektumra hivatkozik. Ha argumentumot adunk át ref paraméterrel az argumentum elé is ki kell írni a ref kulcsszót.

public int ByRef(ref int x){x=x+x; return x;}

Kimeneti: out

A fordító program ellenőrzi, hogy a ref paraméterhez volt-e érték rendelve a metódus hívása előtt. Lehetséges azonban, hogy néha magának a metódusnak kell inicializálnia a paramétert, és ezért inicializálatlan paramétert akarunk átadni. Az out kulcsszó erre ad lehetőséget. Az out kulcsszó az output rövidítése. Ha egy paramétert out kulcsszóval látunk, el a metódus maga rendel a paraméterhez értéket, ekkor azonban az metódusnak a befejeződése előtt minden esetben inicializálnia kell a paramétert.

public void ByOut(int x, out int y;){y=x+x;}

A C#-ban nincs alapértelmezett paraméter (kezdőérték), ilyenkor a túlterhelés használható.

Túlterhelés változó számú paraméterrel a param kulcsszóval. A paraméter listában az utolsó paraméterként lehet változó paraméterlistát adni. Ebben a példában sehol sem foglaljuk le kézzel a tömböt, hogy összeadjuk az elemeket, hanem ezt automatikusan kiszámolja.

class C { public static long Add(params int[] t) { int ctr = 0; long Total = 0; for (ctr = 0; ctr < t.Length; ++ctr) { Total += t[ctr]; } return Total; } } static void Main(string[] args) { //params long l; l = C.Add(1, 2, 3); System.Console.WriteLine("(1+2+3)={0}", l); }

Túlterhelés

Ugyanazon a néven több, de eltérő szignatúrájú függvény definiálható egy osztályon belül. Különböző osztályokban természetesen definiálhatunk azonos nevű és szignatúrájú metódusokat.

A névütközéseket minősített hivatkozással oldjuk fel: objektum.tagfv() illetve osztály.tagfv()

Operátor felüldefiniálás:

Példa operátorra:

public static Vektor operator+(Vektor a, Vektor b) { Vektor v = new Vektor(0,0); v.x = a.x + b.x; v.y = a.y + b.y; return v; }

Az utód osztályban felülírható az ős osztályból származó tagfüggvény:

  1. Virtuálisan felülírt (override)
  2. Újraírt (new)
class Osztaly1 { public virtual void Tagfv(){…} } class Osztaly2 : Osztaly1 { public override void Tagfv(){…} } class Osztaly3 : Osztaly2 { public new virtual void Tagfv(){…} } class Osztaly4 : Osztaly3 { public override void Tagfv(){…} }

Virtuális metódus újraimplementálása az override kulcsszóval, a m etódusok elfedése a new kulcsszóval történik.

Rekurzió

A nyelv támogatja a rekurziót.