Это все на основе стека. Что происходит, так это то, что результат вызова метода, который возвращает значение get_DefaultCredentials
, помещается в стек оценки.
Магической связи нет, значение просто находится на вершине стека.
Просто посмотрите на вызов конструктора, первое, что происходит, это то, что строка "http://www.costco.com"
помещается поверх стека оценки. Тогда конструктор называется. Затем конструктор извлекает значения из стека оценки. Последнее значение, помещенное поверх стека, является последним параметром. ldstr
помещает ровно одно значение на вершину стека. Результат вызова конструктора, который теперь является top , и эта ссылка затем извлекается и сохраняется в местоположении 0 stloc.0
(локальная переменная).
Вызов методов экземпляра немного отличается, первый аргумент в этом случае всегда является объектом, поэтому первый вызов, который вы видите здесь, это ldloc.0
. Что толкает экземпляр объекта WebRequest
поверх стека оценки. Отсюда мы вызываем get_Proxy
методы, которые потребляют значение поверх стека оценки, помещенного туда ldloc.0
, и возвращают возвращенный экземпляр объекта. Это эффективно заменяет значение в верхней части стека оценки. Однако теперь вершина стека больше не является значением, которое ldloc.0
помещает туда.
На самом деле ничего не передается, оно просто выдвигается и выталкивается, выключается и укладывается в стек.