- •Функции
- •Глобальные переменные
- •Использование параметров и возвращаемых значений Модификаторы параметров методов
- •Входные параметры, представленные значением
- •Выходные параметры, представленные значением
- •Ссылочные параметры, определенные явно
- •Ссылочные параметры, определенные неявно
- •Перегрузка функций
- •Передача методу переменного количества аргументов
- •Функция main(): аргументы командной строки
Глобальные переменные
Скомпилируйте и выполните (по очереди) все фрагменты программ Пример 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();
}
*/
}
}
Локальные переменные методов не получают значений по умолчанию автоматически и поэтому должны явно их получать либо через заголовок метода в виде фактических аргументов, либо через оператор присваивания. Компилятор строго следит за этим и при попытке использования переменной без значения выдает ошибку.
