Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

5.1.2Переменные экземпляра

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

5.1.2.1Переменные экземпляра в классах

Переменная экземпляра класса создается при создании нового экземпляра этого класса и удаляется в том случае, если отсутствуют ссылки на этот экземпляр и выполнен деструктор экземпляра (при его наличии).

Начальным значением переменной экземпляра класса является значение, установленное по умолчанию для данного типа переменных (§5.2).

Для целей проверки определенного присваивания переменная экземпляра класса считается переменной с начальным значением.

5.1.2.2Переменные экземпляра в структурах

Переменная экземпляра в структуре имеет такое же время жизни, как и переменная структуры, которой она принадлежит. Другими словами, переменные экземпляра в структуре создаются и удаляются при создании и удалении соответствующей структуры.

Состояние наличия начального значения переменной экземпляра в структуре соответствует состоянию переменной структуры, которой она принадлежит. Другими словами, если переменная структуры считается имеющей начальное значение, это справедливо и для принадлежащих ей переменных экземпляра. Если же переменная структуры считается не имеющей начального значения, ее переменные экземпляра также лишены начального значения.

5.1.3Элементы массива

Элементы массива создаются при создании экземпляра массива и удаляются при отсутствии ссылок на этот экземпляр массива.

Начальное значение каждого из элементов массива равно значению по умолчанию для элементов массива данного типа (§ 5.2).

Для целей проверки определенного присваивания элемент массива считается переменной с начальным значением.

5.1.4Параметры по значению

Параметр, объявленный без модификатора ref или out, является параметром по значению.

Параметр по значению создается при вызове соответствующей функции-члена (метода, конструктора экземпляра, метода доступа или оператора) или анонимной функции, к которой относится данный параметр, и инициализируется по значению аргумента, заданного при вызове функции. Параметр по значению, как правило, удаляется при возвращении значения функцией-членом или анонимной функцией. Тем не менее, если параметр по значению перехвачен анонимной функцией (§7.15), его время жизни увеличивается на срок, пока делегат или дерево выражений, созданные из этой анонимной функции, доступны для сбора мусора.

Для целей проверки определенного присваивания параметр по значению считается переменной с начальным значением.

5.1.5Параметры по ссылке

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

Для параметра ссылки не создается новое место хранения. Параметр по ссылке указывает место хранения переменной, заданной в качестве аргумента при вызове функции-члена или анонимной функции. Таким образом, значение параметра по ссылке всегда совпадает со значением базовой переменной.

В отношении параметров по ссылке применяются указанные ниже правила определенного присваивания. Обратите внимание на разные правила для выходных параметров, описанные в §5.1.6.

  • Переменная должна быть определенно присвоена (§5.3), чтобы ее можно было передать как параметр по ссылке при вызове функции-члена или делегата.

  • В функции-члене или анонимной функции параметр по ссылки считается имеющим начальное значение.

В методе экземпляра или методе доступа экземпляра с типом struct ключевое слово this имеет точно такое же поведение, как параметр по ссылке с типом struct (§7.6.7).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]