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

4.7Динамический тип

Тип dynamic в C# имеет особое значение. Он необходим для обеспечения возможности динамической привязки, которая описана подробно в §7.2.2.

Тип dynamic считается идентичным типу object за исключением следующих случаев:

  • если операции и выражения типа dynamic могут быть использованы в динамической привязке (§7.2.2);

  • вывод типа (§7.5.2) предпочтет тип dynamic типу object при наличии обоих вариантов.

Ввиду этой равнозначности, верно, что:

  • Существует неявное преобразование идентификации между типами object и dynamic, а также между сформированными типами, которые являются теми же, когда заменяют типы dynamic и object.

  • Явные и неявные преобразования от/к типа object также относятся к типу dynamic.

  • Сигнатуры метода, которые являются теми же, когда заменяют тип dynamic на тип object, считаются теми же сигнатурами.

Тип dynamic не отличается от типа object во время выполнения.

Выражение типа dynamic указывает на то, что это динамическое выражение.

5.Переменные

Переменные указывают места хранения данных. Каждая переменная имеет тип, который определяет, какие значения могут храниться в этой переменной. В языке C# все данные должны относиться к определенному типу, компилятор C# обеспечивает соответствие типа значений, хранящихся в переменных. Значение переменной можно изменить путем присваивания или при помощи операторов ++ и ‑‑.

Получить значение переменной можно только в том случае, если она является определенно присвоенной (§5.3).

Как рассматривается в следующих разделах, переменные подразделяются на переменные с начальным значением и переменные без начального значения. Переменная с начальным значением имеет должным образом определенное исходное значение и всегда считается определенно присвоенной. У переменной без начального значения исходное значение отсутствует. Чтобы переменная без начального значения считалась определенно присвоенной в конкретном месте, необходимо присвоить этой переменной значение в каждом возможном пути выполнения, ведущем к указанному месту.

5.1Категории переменных

В C# определено семь категорий переменных: статические переменные, переменные экземпляра, элементы массива, параметры по значению, параметры по ссылке, выходные параметры и локальные переменные. Эти категории рассматриваются в следующих ниже разделах.

В этом примере

class A { public static int x; int y;

void F(int[] v, int a, ref int b, out int c) { int i = 1; c = a + b++; } }

Переменная x является статической переменной, y — переменной экземпляра, v[0] — элементом массива, a — параметром по значению, b — параметром по ссылке, c — выходным параметром, а i — локальной переменной.

5.1.1Статические переменные

Поле, объявленное с модификатором static, называется статической переменной. Статическая переменная создается перед выполнением статического конструктора (§10.12) для содержащегося в ней типа и прекращает свое существование при удалении домена связанного приложения.

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

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

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