Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция5 Безопасность 2018.pptx
Скачиваний:
13
Добавлен:
08.12.2019
Размер:
170.98 Кб
Скачать

Область видимости может быть

вложенной.

создавая блок кода, создаете новую вложенную область видимости,

при этом внешняя область становится видимой для вложенной области –

объекты, объявленные во внешней области видимости, будут видимы для кода из внутренней области видимости,

но объекты, объявленные во внутренней области видимости, не будут видимы для кода внешней области видимости.

32

//В программе демонстрируется возможности доступа

//к переменной в зависимости от области видимости, //в которой она была объявлена.

using System;

class ScopeDemo {

public static void Main() {

int x; // Переменная x известна всему коду

//в пределах метода Main(). x = 10;

if(x == 10) { //Создается новая область видимости.

int y = 20;

//Эта переменная будет видна только в рамках

//этого блока.

33

// В данном блоке видны обе переменные, x и y.

Console.WriteLine("Видны x и y: " + x + " " + y);

x = y * 2;

}

y = 100; // Ошибка! Переменная y здесь не

видна!

//Выполняется доступ к переменной x, которая была

//объявлена в этой области видимости.

Console.WriteLine("Значение переменной x

равно: " + x);

}

}

34

Внутри блока переменная может быть объявлена в любом месте,

после чего она становится действительной.

Следовательно, если определить переменную в начале метода,

она будет доступна всему коду в рамках метода.

И наоборот, если объявить переменную в конце блока,

то ее нельзя использовать до момента объявления, поскольку

код не будет иметь к ней доступа.

35

!!! ВАЖНО:

переменные создаются при их объявлении в какой- либо области видимости (при входе в данную область)

и уничтожаются при выходе из этой области.

Переменная, объявленная в пределах метода, не будет хранить свои значения между вызовами этого метода.

Также переменная, объявленная в рамках блока, будет терять свое значение при выходе из блока.

Следовательно, время жизни переменной ограничено ее областью видимости.

Если при объявлении переменной одновременно происходит ее инициализация, то переменная будет

повторно инициализироваться каждый раз при входе в блок, в котором она объявлена.

36

Пример:

using System;

class VarInitDemo {

public static void Main() { int x;

for(x = 0; x < 3; x++) { int y = -1;

// Переменная y инициализируется каждый раз // при входе в блок.

Console.WriteLine("Значение переменной y равно: " + y);

// Всегда выводится значение -1. y = 100;

Console.WriteLine("Теперь значение переменной y равно: " + y);

}

}

}

результат выполнения программы:

Значение переменной y равно: -1

Теперь значение переменной y равно: 100 Значение переменной y равно: -1

Теперь значение переменной y равно: 100 Значение переменной y равно: -1

Теперь значение переменной y равно: 100

37

переменная y

инициализируется значением -1 каждый раз при входе во внутренний цикл for,

затем ей присваивается значение 100,

которое утрачивается при завершении цикла.

Примечание.

Между языками C# и С есть отличие в работе с областями видимости.

блоки могут быть вложенными, но переменная, объявленная во внутренней области видимости, не может иметь такое же имя, как переменная,

объявленная во внешней области видимости.

38

Программа с попыткой объявить две переменные с одинаковыми именами ошибочна:

using System;

class BadVar {

public static void Main() {

int count;

for(count = 0; count < 10; count = count+1) {

Console.WriteLine("Счет проходов цикла: " + count);

int count; // Это объявление недействительно!!!

}

}

}

39