русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-07-09; просмотров: 472; Нарушение авторских прав


Любая используемая в программе сущность вводится объявлением.

Объявлению подлежат:

§ классы и структуры. Класс (структура) может содержать вложенные объявления других классов и структур,

§ перечисления,

§ объекты - переменные и константы, представляющие классы и структуры. Корректное объявление объекта предполагает, что информация, содержащая характеристики объявляемого объекта доступна транслятору.

§ элементы перечислений – объекты, представляющие перечисления,

§ конструкторы классов и методы (функции) – члены классов (в том числе и специальные).

Объявляемой сущности присваивается имя. Обращение к ранее объявленным сущностям в программе обеспечивается различными вариантами имён. Имена в программе повсюду и главная проблема заключается в том, чтобы не допустить неоднозначности при обращении из разных мест программы к классам, членам классов, перечислениям, переменным и константам.

Конфликта имён (проблемы с обращением к одноименным объектам) позволяет избежать принятая в языке дисциплина именования. В каждом языке программирования она своя.

Избежать конфликта имён в C# позволяет такая синтаксическая конструкция как блок операторов. Блок – это (возможно пустое) множество предложений, заключённое в фигурные скобки.

Различается несколько категорий блоков:

§ тело класса (структуры). Место объявления членов класса,

§ тело метода. Место расположения операторов метода,

§ блок в теле метода.

 

Переменные можно объявлять в любом месте блока. Точка объявления переменной в буквальном смысле соответствует месту её создания. Обращение к объявляемой сущности (переменной или константе) “выше” точки её объявления лишено смысла.

Новый блок – новая область видимости. Объекты, объявляемые во внутренних блоках не видны во внешних блоках. Объекты, объявленные в методе и во внешних блоках видны и во внутренних блоках. Одноимённые объекты во вложенных областях конфликтуют.



Объекты, объявляемые в блоках одного уровня вложенности в методе не видны друг для друга. Конфликта имён не происходит.

В теле класса не допускается объявления одноимённых данных-членов. Нарушение этого правила приводит к неоднозначности.

В теле класса не допускается объявления одноимённых функций-членов (методов класса) с пустыми списками параметров и с совпадающим порядком расположения типа параметра в списках параметров (с сигнатурой метода). Здесь не важны имена параметров. Важно, что выражение вызова метода в этом случае будет неоднозначным.

Имена данных-членов класса не конфликтуют с одноименными переменными, объявляемыми в теле методов, поскольку в теле метода обращение к членам класса обеспечивается выражениями с операцией доступа и никакого конфликта в принципе быть не может.

Ниже приводится простой программный код, отражающий особенности принятой в C# концепции областей видимости.

 

using System;

class Class1

{

static int s;

 

static void Main(string[] args)

{

{int s;}

{int s;}

 

{

Class1.s = 100; // Классифицированное имя!

int s;

{

//int s;

}

}

 

System.Int32 z = new int();

char a = (char)41;

char b = ‘X’;

Console.WriteLine(“{0} {1}”,a,b);

}

 

//void QQQ(int q0)

//{

//Class1.s = 10;

//int s;

//}

 

//void QQQ(int q1)

//{

//Class1.s = 10;

//int s;

//}

 

int QQQ(int q2)

{

Class1.s = 10;

int s;

return 0;

}

 

int QQQ(int q2, int q3)

{

//s = 100;

Class1.s = 10;

int s;

return 0;

}

}



<== предыдущая лекция | следующая лекция ==>
Перечисления | Управляющие операторы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.605 сек.