using System;
/// @author Vesa Lappalainen
/// @version 26.10.2012
///
/// Tutkitaan muuttujinen näkyvyyttä
///
public class MuuttujienNakyvyys
{
///
/// Missä pääohjelman muuttujat näkyvät
///
/// ei käytössä
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
// 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(String.Join(" ",luvut));
Console.ReadKey();
}
///
/// Laitetaan taulukon luvut paikkaan uusi luku ja edelliseen paikkaa 3 suurempi luku.
/// Kutsuttavan paikan PITÄÄ olla [1,taulukokoko-1]
///
/// taulukko jota muutetaan, aliohjelman oma viite, mutta viitteen kautta voi muuttaa myös kutsuvan ohjelman taulukkoa
/// paikka jota muutetaan, näkyy vain aliohjelmassa, muuttaminen ei vaikuta kutsuvaan ohjelmaan
/// uusi arvo, näkyy vain aliohjelmassa, sama nimi ei haittaa, muuttaminen ei vaikuta kutsuvaan ohjelmaan
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
luku = 12; // ei vaikuta pääohjelmaan koska oma lokaali muuttuja jota ei ole enää kun poistutaan
}
}