Metodit

Metodit  niputtavat joukon lauseita yhdeksi kokonaisuudeksi, jota voidaan kutsua nimeltä aina tarvittaessa.

Metodin rakenne on

[määreet] [paluutyyppi] [nimi]([parametrit])
{
	// suoritettavat lauseet
	// ...
}

määreillä (valinnaisia) voi muuttaa metodin luonnetta sekä näkyvyyttä paluutyyppi (pakollinen) tarkoittaa tyyppiä, jonka metodi palauttaa (void tarkoittaa, että metodi ei palauta arvoa) nimi (pakollinen) on metodin nimi parametrit (valinnaisia) tarkoittavat arvoja, joita metodille välitetään sitä kutsuttaessa

Metodi joka ottaa parametreina kaksi int-muuttujaa ja palauttaa niiden summan

public class Laskuri
{
	// metodi
	public int YhteenLasku(int luku1, int luku2)
	{
		return luku1 + luku2;
	}
}

Määreet

Metodeille voi antaa määreitä
Määre Tehtävä
public, internal, protected tai private Suojausmääre (ketkä voivat nähdä metodin)
static Staattinen metodi
abstract Abstrakti metodi (ei toteutusta)
virtual Virtuaalinen metodi (perivä luokka voi kuormittaa)
override Kuormitus (ylikirjoitetaan perityn luokan toteutus)
new Piilotetaan perityn luokan metodi
sealed Sinetöity (ei voi enää kuormittaa)
unsafe Sisältää epäturvallista koodia (esim. osoittimia)
extern Toteutus tulee jostain muualta (esim. dll)

Parametrit

Parametrit voi välittää käyttäen arvoa tai viittausta.
Arvon välittäminen
Kun parametri välitetään arvolla, annetaan arvotyypeistä kopio, jolloin arvon muuttaminen ei vaikuta alkuperäiseen muuttujaan. Viittaustyypeissä tilanne on toinen ja esim. luokan ominaisuuden muuttaminen näkyy alkuperäisessä muuttujassa. Viittaustyypin osoittaminen uuteen sijaintiin muistissa (eli uuden luominen new-sanalla) ei kuitenkaan vaikuta alkuperäiseen muuttujaan.
public int Muuta(int luku)
{
	return ++luku;
}
public void MuutaA(OmaLuokka oma)
{
	// vaikuttaa alkuperäiseen
	oma.Luku++;
}
public void MuutaB(OmaLuokka oma)
{
	// ei vaikuta alkuperäiseen
	oma = new OmaLuokka();
	oma.Luku++;
}
Viittauksen välittäminen
Parametri voidaan määrätä viittauksella välitettäväksi, kun sen eteen laitetaan avainsana ref. Viittauksella välitetyn parametrin muuttaminen näkyy alkuperäisessä muuttujassa. Myös viittaustyypin osoittaminen uuteen sijaintiin muistissa vaikuttaa alkuperäiseen muuttujaan.
public void Muuta(ref int luku)
{
	luku++;
}
public void Muuta(ref OmaLuokka oma)
{
	// vaikuttaa alkuperäiseen
	oma = new OmaLuokka();
	oma.Luku = 5;
}
Tuntematon määrä parametreja
Metodille voi välittää tuntemattoman määrän parametreja avainsanalla params. Parametrin tyyppi on tällöin taulukko haluttua tietotyyppiä.
public int Summa(params int[] numerot)
{
	int summa = 0;
	foreach (int numero in numerot)
	{
		summa += numero;
	}
	return summa;
}
int summa = Summa(1,2,3,4,5);

Params pitää sijoittaa viimeiseksi parametrien listassa.

Nimetyt ja valinnaiset parametrit
Nämä tulivat mukaan C# versiossa 4.0. Parametrit voi asettaa valinnaiseksi antamalla niille oletusarvon. Valinnaisten parametrien tulee olla viimeisenä listassa. Esimerkissä teksti on valinnainen
static void TeeJotain(int luku, bool tosi, string teksti = "oletusteksti")
{
	Console.WriteLine(luku);
	Console.WriteLine(tosi);
	Console.WriteLine(teksti);
}

Jolloin metodia voi kutsua

// ei anneta tekstiä, vaan käytetään oletusarvoa
TeeJotain(1,true);
// annetaan tekstille arvo
TeeJotain(2,false,"oma teksti");

Parametreille voi antaa arvot nimellä, jolloin ne voi laittaa eri järjestykseen kuin metodin määrittelyssä. Edellä ollutta metodia voisi kutsua esim.

TeeJotain(tosi:false, teksti:"teksti", luku:1);