Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Объявление локальных переменных

Объявление локальных переменных

Давайте выясним, как объявляются локальные переменные. Предположим, что мы должны построить в терминах CIL метод MyLocalVariables(), не имеющий никаких аргументов и возвращающий void. В этом методе мы должны определить три локальные переменные типов System.String, System.Int32 и System.Object. В C# соответствующий программный код мог бы выглядеть так, как показано ниже (напомним, что локальные переменные не получают значения по умолчанию, поэтому им перед использованием необходимо присвоить начальные значения).

public static void MyLocalVariables() {
 string myStr = "CIL me dude…";
 int myInt = 33;
 object myObj = new object();
}

Если создавать MyLocalVariables() непосредственно в CIL, можно было бы написать следующее,

.method public hidebysig static void MyLocalVariables() cil managed {
 .maxstack 6
 // Определение трех локальных переданных.
 .locals init ([0] string myStr, [1]int32 myInt, [2]object myObj)
 // Загрузка строки в виртуальный стек выполнения.
ldstr "CIL me dude…"
 // Извлечение текущего значения и сохранение его
 // в локальной переменной [0].
 stloc.0
 // Загрузка константы типа 'i4'
 // (сокращение для int32) со значением 33.
 ldc.i4 33
 // Извлечение текущего значения и сохранение его
 // в локальной переменной [1].
 stloc.1
 // Создание нового объекта и помещение его в стек.
newobj instance void [mscorlib]System.Object::.ctor()
 // Извлечение текущего значения и сохранение его
 // в локальной переменной [2].
 stloc.2
 ret
}

Как видите, в CIL при размещении локальных переменных сначала используется директива .locals с атрибутом init. При этом в скобках каждая переменная связывается со своим числовым индексом (здесь это [0], [1] и [2]). Каждый индекс идентифицируется типом данных и (необязательно) именем переменной. После определения локальных переменных соответствующее значение загружается в стек (с помощью подходящих кодов операций, связанных с загрузкой) и запоминается в локальной переменной (с помощью подходящих кодов операций для сохранения значений).

Оглавление книги


Генерация: 1.151. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз