Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Функции.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
105 Кб
Скачать
☆

Глобальные переменные

Скомпилируйте и выполните (по очереди) все фрагменты программ Пример 1 и Пример 2 (включая закомментированные) и объясните результаты.

Пример 1.

//Область видимости переменных в функциях

using System;

namespace Func01

{

class Program

{

/* static void Write()

{

Console.WriteLine("myString = {0}",myString);//ошибка

}

static void Main(string[] args)

{

string myString = "String defined in Main()");//не используется

Write();

Console.ReadKey();

}

*/

//описать последовательность выполнения операторов

/* static void Write()

{

string myString = "строка из Write()";//локальная

Console.WriteLine("\n это Write()!");

Console.WriteLine("myString = {0}", myString);

}

static void Main(string[] args)

{

string myString = "строка из Main()";//локальная переменная

Write();

Console.WriteLine("\n это Main()");

Console.WriteLine("myString = {0}", myString);

Console.ReadKey();

}

*/

static string myString;//глобальная переменная

static void Write()

{

string myString = "строка из Write()";//локальная переменная

Console.WriteLine("\n это Write()");

Console.WriteLine("Local myString = {0}", myString);

Console.WriteLine("Global myString = {0}", Program.myString);

}

static void Main(string[] args)

{

string myString = "строка из Main()";//локальная переменная

Program.myString = "Global string";

Write();

Console.WriteLine("\n это Main()");

Console.WriteLine("Local myString = {0}", myString);

Console.WriteLine("Global myString = {0}", Program.myString);

Console.ReadKey();

}

}

}

//------------------------------------------------------------------------

Пример 2

//область видимости переменных в других структурах

using System;

namespace Func02

{

class Program

{

/* static void Main(string[] args)

{

int i;

for (i = 0; i < 10; i++)

{

string text = "строка " + Convert.ToString(i);

Console.WriteLine("{0}", text);

}

Console.WriteLine("вывод текста в цикле: {0}", text);//ошибка

}

*/

static void Main(string[] args)

{

int i;

string text;

for (i = 0; i < 10; i++)

{

text = "строка " + Convert.ToString(i);

Console.WriteLine("{0}", text);

}

Console.WriteLine("вывод текста в цикле: {0}", text);//ошибка

/* text - ссылка, которая инициализируется внутри блока, а при

выходе из блока выделенная в нем ОП не доступна (освобождается сборщиком мусора).*/

}

/*

static void Main(string[] args)

{

int i;

string text = " ";

for (i = 0; i < 10; i++)

{

text = "строка " + Convert.ToString(i);

Console.WriteLine("{0}", text);

}

Console.WriteLine("вывод текста в цикле: {0}", text);

Console.ReadKey();

}

*/

}

}

Локальные переменные методов не получают значений по умолчанию автоматически и поэтому должны явно их получать либо через заголовок метода в виде фактических аргументов, либо через оператор присваивания. Компилятор строго следит за этим и при попытке использования переменной без значения выдает ошибку.