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ää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) |
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++;
}
public void Muuta(ref int luku)
{
luku++;
}
public void Muuta(ref OmaLuokka oma)
{
// vaikuttaa alkuperäiseen
oma = new OmaLuokka();
oma.Luku = 5;
}
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.
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);