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: