CS-opas:Metodien hienouksia
Mureakuha
- Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Metodien hienouksia.
Sisällysluettelo |
Johdanto
Esimerkeissä käytetään staattisia metodeja, koska näitä varten ei tarvitse eikä saa luoda oliota. Tämä taas lyhentää esimerkkien pituutta.
Staattiset luokan jäsenet
Staattinen metodi on olemassa kokonaisuutena eikä sen määrätyllä instanssilla. Kuten muutkin staattiset jäsenet, staattisen metodin perusominaisuus on se, että se on kaikille luokan instansseille yhteinen. Alla esimerkki staattisten muuttujien käytöstä:
namespace Harjoitus2 { class Luokka { public static int intPublicValue; } class MainClass { private static int intPublicValue2; public static void Main(string[] args) { Luokka.intPublicValue = 7; MainClass.intPublicValue2 = 13; Console.WriteLine("intPublicValue on:{0}",Luokka.intPublicValue); Console.WriteLine("intPublicValue2 on:{0}",MainClass.intPublicValue2); } } }
PARAMS Metodille tuntematon määrä parametreja
using System; namespace Harjoitus2 { class Matikka { public static void Main(string[] args) { int tot = Matikka.Summaaja(14,23,54,5); Console.WriteLine("{0}",tot); } public static int Summaaja(params int[] arvoja) //params avainsanalla määritetään, että parametreistä //luodaan tietyn tyyppinen taulukko. { int paluu = 0; foreach (int arvo in arvoja) { paluu+=arvo; } return paluu; //Palautetaan yhteenlaskettu summa } } }
REF avainsana
C#:ssa metodille välitetään perustyypinolioista kuten int ja double vain arvo. Tälläisten olioiden osoite voidaan välitää metodille käyttämällä REF avainsanaa. Tälläiseen muuttujaan tehdyt muutukset näkyvät myös metodin ulkopuolella.
using System; namespace Harjoitus2 { class Matikka { public int arvo; public Matikka(int arvo) { this.arvo = arvo; } public static void Main(string[] args) { int luku = 7; Matikka.Summaaja(ref luku,5); Console.WriteLine("{0}",luku); //Tulostaa 12 Matikka m = new Matikka(9); Matikka.Muuta(m); Console.WriteLine("{0}",m.arvo); //Tulostaa 10 luku = 10; Matikka.Summaaja2(luku,10); Console.WriteLine("{0}",luku); //Tulostaa 10 } public static void Summaaja(ref int luku1, int luku2) { luku1 = luku1 + luku2; } public static void Summaaja2(int luku1, int luku2) { luku1 = luku1 + luku2; } public static void Muuta(Matikka ma) { ma.arvo = 10; } }
OUT
OUT-avainsanan käyttö tehostaa useamman tiedon palauttamista metodilta. OUT avainsanalla voidaan välittää metodille usean muuttujan osoite ilman arvoa. Metodissa voidaan tallentaa muuttujaan arvo, joka näkyy myös metodin ulkopuolella.
using System; namespace Harjoitus2 { class Matikka { public static void Main(string[] args) { int arpa1, arpa2; Matikka.Arpoja(out arpa1,out arpa2); Console.Write("Arpa1 on {0} ja arpa2 on {1}",arpa1,arpa2); } public static void Arpoja(out int arpa1,out int arpa2) { Random random = new Random(); arpa1 = random.Next(100); arpa2 = random.Next(100); } } }
