using System; /// @author Vesa Lappalainen /// @version 26.10.2012 /// <summary> /// Tutkitaan muuttujinen näkyvyyttä /// </summary> public class MuuttujienNakyvyys { /// <summary> /// Missä pääohjelman muuttujat näkyvät /// </summary> /// <param name="args">ei käytössä</param> public static void Main(string[] args) { int luku = 9; // Näkyy vain pääohjelmassa double d = 5.5; // Näkyy vain pääohjelmassa int[] luvut = { 1, 2, 3 }; // Näkyy vain pääohjelmassa, mutta viitteen kautta aliohjelmakin voi muuttaa Muuta(luvut, 2, luku); { // apulohko, jossa omia muuttujia int uusi = 3; // muuttuja joka näkyy vain tässä lohkossa Console.WriteLine(uusi); } // nyt uusi-muuttuja lakkaa olemasta // Muuttujaa uusi ei ole enää olemassakaan // Täytetään taulukkoa int edellinen = 0; for (int i = 0; i < luvut.Length; i++) { int nyt = luvut[i]; // on olemassa silmukan sisällä int iso = 3 * nyt; // on olemassa silmukan sisällä luvut[i] += iso; edellinen = nyt + luku; // silmukan ulkopuolella määritelty muuttuja } Console.WriteLine($"{d} {edellinen}"); } /// <summary> /// Laitetaan taulukon luvut paikkaan uusi luku /// </summary> /// <param name="luvut">taulukko jota muutetaan, aliohjelman oma viite, mutta viitteen kautta voi muuttaa myös kutsuvan ohjelman taulukkoa</param> /// <param name="paikka">paikka jota muutetaan, näkyy vain aliohjelmassa, muuttaminen ei vaikuta kutsuvaan ohjelmaan</param> /// <param name="luku">uusi arvo, näkyy vain aliohjelmassa, sama nimi ei haittaa, muuttaminen ei vaikuta kutsuvaan ohjelmaan</param> public static void Muuta(int[] luvut, int paikka, int luku) { luvut[paikka] = luku; // viitteen ansiosta pääohjelman taulukko muuttui paikka--; // ei vaikuta pääohjelmaan int uusiarvo; // aliohjelman lokaali muuttuja uusiarvo = luku + 3; luvut[paikka] = uusiarvo; // muuttaa pääohjelman taulukkoa // ReSharper disable once RedundantAssignment luku = 12; // ei vaikuta pääohjelmaan } }