Chciałbym zrozumieć, jak wszechobecne może być podciąganie JIT.Czy JIT może wstawiać mój kod do kodu zestawu środowiska wykonawczego .NET?
Załóżmy, że w moim kodzie wywołuję jakąś funkcję z zestawu powiedzmy System.IO
i przekazuję odwołanie zwrotne do funkcji zaimplementowanej w moim kodzie do wywołania z wewnątrz tej funkcji System.IO
. W mojej funkcji jest wywołanie GetCallingAssembly()
. Więc jeśli mój callback zostanie zainicjowany w System.IO
, to połączenie z GetCallingAssembly()
, które pierwotnie znajdowało się w moim kodzie i miało na celu powiedzenie, że "aktualna" metoda jest wywoływana z poziomu System.IO
, powie, że teraz jest wywoływane z mojego kodu.
Czy istnieje możliwość takiego wbudowania lub czy zestawy wykonawcze środowiska .NET są traktowane inaczej, tak aby JIT, wprowadzając kod użytkownika do kodu środowiska wykonawczego .NET był niedozwolony?
W jaki sposób delegata oddzwaniacza kiedykolwiek zostanie zaindeksowany przez wywołującego wywołanie zwrotne? Nie jestem pewien, czy to ma sens ...? Rozumiem, że wbudowywanie ogranicza się do scenariuszy, w których kod do wywołania jest ** możliwy do sprawdzenia ** - to jest połączenie statyczne lub połączenie wirtualne z metodą inną niż wirtualna. –
@ Mark Gravel: Dlaczego nie mógłbym tego zrobić, gdyby wiedział, że jest to jedyne wywołanie wywoływacza wywołania zwrotnego w całym programie? – sharptooth
Podejrzewam, * że jest więcej wysiłku, aby zrozumieć, niż JIT kiedykolwiek zrobi, zwłaszcza, że istnieje odbicie/meta-programowanie (co oznacza, że nowi rozmówcy mogą istnieć później). –