Parametrit

C#-kielessä parametrien oletusvälitystapa on aina kopio.Myös viittaustyypeillä parametri on tarkka kopio (bitwise copy). Parametri voi olla vakioarvo tai muuttuja.


class Testi 
{
	public int luku;
}
static void Main(string[] args)
{
	esti t = new Testi();
	t.luku = 7;
	Console.WriteLine(t.luku);
	Lisaa1(h);
	Console.WriteLine(t.luku);
	Lisaa2(t.luku);
	Console.WriteLine(t.luku);
}
static void Lisaa1(Testi x)
{
	x.luku++;
}
static void Lisaa2(int l)
{
	l++;
	Console.WriteLine("Luokan l = " + l.ToString());
}

Viittausparametri

Viittausparametri tarkoittaa, että metodi käsittelee suoraan muuttujaa, jonka kutsuja antaa metodille parametriksi. Parametrin arvoa ei tällöin kopioida lainkaan. Viittausparametri asetetaan ref-määreellä ja se pitää olla sekä kutsuvassa metodissa että itse kutsussa. Viittausparametrilla täytyy olla asetettu arvo jo ennen metodin kutsua. Muuttuja, jota käytetään tulee olla sellainen, että sitä voidaan käyttää sijoituslauseen vasemmalla puolella (ns. lvalue eli left value = asetettavissa oleva muuttuja).

using System;
namespace paramEsim
{

	class Testi
	{
		static void Kasvata(ref int luku)
		{
			luku++;
		}
		
		static void Main()
		{
			int i = 7;
			Kasvata(ref i);
		}
}

Ref-parametri ei saa olla vakiomuuttuja (const).

Out-parametri

Out-parametri toimii samalla lailla kuten ref-parametri, mutta parametrilla ei tarvitse olla arvoa ennen kutsua, vaan kutsuttu metodi asettaa sille arvon. Muuttuja, jota käytetään tulee olla sellainen, että sitä voidaan käyttää sijoituslauseen vasemmalla puolella (ns. lvalue eli left value = asetettavissa oleva muuttuja). Parametria ei kopioida. Out-määre pitää olla sekä kutsuvassa metodissa että itse kutsussa.

using System;
namespace paramEsim
{

	class Testi
	{
		static void Aseta(out int luku)
		{
			luku = 1;
		}
		
		static void Main()
		{
			int i;
			Aseta(out i);
		}
}

Parametreista huomioitavia seikkoja:

    1. Saman luokan metodeita ei voi eroittaa pelkästään out/ref-määreen osalta (ei ylikuormitusmahdollisuutta).
    2. Saman tyypin metodit ei saa erota pelkästään paluuarvon tyypin osalta.
    3. Parametrilla on oltava aina nimi.
    4. Parametreilla ei voida käyttää oletusarvoja.
    5. Parametri ei voi olla const.
    6. Parametrilista ei voi olla void (laitetaan tyhjäksi, jos ei parametreja).