MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Что происходит "внутри" при обращении к статическому методу не статического класса?"
Answer 1084646
Что происходит под капотом при первом и последующих вызовах статического метода этого класса? Язык - c#
Ничего особенного, в сущности. Тут скорее надо ставить вопрос по другому, что не происходит, по сравнению с вызовом метода экземпляра. Если взять код
Test.TestStatic("Hello, world");
, то на уровне IL он будет представлен так:ldstr "Hello, world" call void Test::TestStatic(string)
То есть аргументы загружаются в стек, и управление передается вызываемому методу. Экземпляр класса нигде не фигурирует. Первый вызов будет отличаться только в случае, если это вообще первое обращение к классу за все время выполнения программы - тогда перед ним будет вызван статический конструктор и проинициализированы статические поля. Остальные вызовы идентичны.
Для сравнения, вызов метода экземпляра:
ldloc.0 ldstr "Hello, world" callvirt instance void Test::TestInstance(string)
Первая инструкция здесь загружает в стек ссылку на экземпляр класса (который хранится в локальной переменной 0) - она играет роль неявного первого параметра. Инструкция
callvirt
генерируется компилятором C# вместоcall
в том контексте, где ссылка на экземпляр может потенциально быть null, даже если метод не виртуальный, чтобы обеспечить корректную проверку на null и генерацию NullReferenceException. Но для вызова метода экземпляра может использоваться иcall
.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.