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.
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.
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:
Az utód osztályban felülírható az ős osztályból származó tagfüggvény:
Virtuális metódus újraimplementálása az override kulcsszóval, a m etódusok elfedése a new kulcsszóval történik.
A nyelv támogatja a rekurziót.