ВУЗ:
Составители:
Рубрика:
57
переменных используется редко. Вместе с тем полезно понимать, что
объявление с инициализацией int y = 0 можно рассматривать как создание
нового объекта (new) и вызова для него конструктора по умолчанию. При
инициализации в объектной форме может быть вызван только конструктор по
умолчанию, другие конструкторы с параметрами для встроенных типов не
определены. В примере закомментировано объявление переменной v с
инициализацией в объектном стиле, приводящее к ошибке, где делается
попытка дать переменной значение, передавая его конструктору в качестве
параметра.
Откладывать инициализацию не стоит, как показывает пример с
переменной s, объявленной с отложенной инициализацией. В вычислениях она
дважды получает значение: один раз в операторе if, другой – в операторе цикла
for. Тем не менее, при компиляции возникнет ошибка, утверждающая, что в
процедуре WriteLine делается попытка использовать неинициализированную
переменную s. Связано это с тем, что для операторов if и for на этапе
компиляции не вычисляются условия, зависящие от переменных. Поэтому
компилятор предполагает худшее – условия ложны, инициализация s в этих
операторах не происходит.
3.3. Время жизни и область видимости переменных
Давайте рассмотрим такие важные характеристики переменных, как
время их жизни и область видимости. Область видимости зависит от того, где и
как, в каком контексте объявлены переменные. В языке C# не так уж много
возможностей для объявления переменных, пожалуй, меньше, чем в любом
другом языке. В C# вообще нет настоящих глобальных переменных. Их
отсутствие не следует считать некоторым недостатком C#, это достоинство
языка.
3.3.1. Поля
Первая важнейшая роль переменных, – они задают свойства структур,
интерфейсов, классов. В языке C# такие переменные называются полями
(fields). Поля объявляются при описании класса (и его частных случаев –
интерфейса, структуры). Когда конструктор класса создает очередной объект –
экземпляр класса, то он в динамической памяти создает набор полей,
определяемых классом, и записывает в них значения, характеризующие
свойства данного конкретного экземпляра. Так что каждый объект в памяти
можно рассматривать как набор соответствующих полей класса со своими
значениями. Время существования и область видимости полей определяется
объектом, которому они принадлежат. Объекты в динамической памяти, с
которыми не связана ни одна ссылочная переменная, становятся недоступными.
Реально они оканчивают свое существование, когда сборщик мусора (garbage
collector) выполнит чистку «кучи». Для значимых типов, к которым
Страницы
- « первая
- ‹ предыдущая
- …
- 51
- 52
- 53
- 54
- 55
- …
- следующая ›
- последняя »
