Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Скрытая ссылка this
Скрытая ссылка this
Обратите внимание на то, что в рамках программного кода CIL для ссылок на два входных аргумента (а и b) используются их индексы позиции (индекс 0 и индекс 1, поскольку индексация в виртуальном стеке выполнения начинается с нуля).
При анализе программного кода и его создании непосредственно в CIL следует быть очень внимательным, поскольку каждый (нестатический) метод, имеющий входные аргументы, автоматически получает неявный дополнительный параметр, который является ссылкой на текущий объект (это должно вызвать аналогию с ключевым словом C# this). Поэтому, если определить метод Add(), как нестатический
// Уже не является статическим!
public int Add(int a, int b) {
return a + b;
}
то входные аргументы а и b будут загружаться с помощью ldarg.1 и ldarg.2 (а не с помощью ожидаемых ldarg.0 и ldarg.1). Причина как раз в том, что ячейка 0 будет содержать неявную ссылку this. Рассмотрите следующий псевдокод.
// Это только псевдокод!
.method public hidebysig static int32 AddTwoIntParams(MyClass_HiddenThisPointer this, int32 a, int32 b) cil managed {
ldarg.0 // Загрузка MyClass_HiddenThisPointer в стек,
ldarg.1 // Загрузка 'а' в стек.
ldarg.2 // Загрузка 'b' в стек.
…
}
- Conventions used in this document
- Why this document was written
- Terms used in this document
- 10. FUTURE REVISIONS OF THIS LICENSE
- How to use this License for your documents
- 4.1.5. Права доступа к ссылкам
- 10.7.3. Рассылка файлов
- What This Book Is Not
- Прямая почтовая рассылка
- Вариант 4. Договориться о бесплатном размещении анонсов в чужих рассылках
- Purpose and Audience for This Book
- About This Book