Przesyłam kod, który szeroko wykorzystuje DynamicMethod
s, aby umożliwić prekompilację, dla lepszej wydajności uruchamiania na zimno. Zauważyłem, że można je JITted i wykonać z pominiętymi sprawdzeniami widoczności, co pozwala im uzyskać dostęp do prywatnych typów zagnieżdżonych, ale normalne złożenia nie mogą (lub nie mogą? Nie widzę żadnej oczywistej opcji programu ładującego). Jakie jest uzasadnienie tej decyzji dotyczącej projektu?Dlaczego pomijanie kontroli widoczności jest dozwolone tylko w przypadku metod dynamicznych?
Odpowiedz
Muszę pomachać rękami nieco odpowiadając na to pytanie, CAS jest na zawsze skomplikowany. Argument skipVisibility jest odpowiedni dla zaufanych aplikacji hosta, które generują kod wykonywany w piaskownicy. W takim przypadku nie jest właściwe wykonywanie sprawdzeń, gdy metoda jest generowana, ponieważ środowisko wykonawcze jest błędne. Musi się to zdarzyć, gdy metoda zostanie przeprowadzona wewnątrz piaskownicy. Gdzie jest poddawany normalnym kontrolom CAS wykonywanym przez piaskownicę.
Ustawienie prawdziwego argumentu dodaje żądanie zgody na ReflectionPermissionFlag.MemberAccess, wymagane, aby mieć szansę na wygenerowanie wygenerowanej metody.
Topsy-turvy. Istnieje kilka dodatkowych informacji w sekcji this MSDN article, "Dodawanie restrictedMemberAccess do Sandboxed Domains".
- 1. Debugowanie metod dynamicznych .NET
- 2. Dlaczego "do" jest dozwolone w funkcji?
- 3. Ta forma wywołania metody jest dozwolona tylko w przypadku metod klasowych błąd
- 4. Dlaczego to zachowanie jest dozwolone w modelu pamięci Java?
- 5. Python: dlaczego `nie return` dozwolone w module
- 6. W Ember.js czy ustawienia setupController i przechwytywania modelu działają tylko w przypadku segmentów dynamicznych?
- 7. Dlaczego otrzymałem polecenie "main.using jest dozwolone tylko na poziomie", gdy użyłem wyrafinowania w IRB?
- 8. Pomijanie „«...»jest przestarzała” podczas korzystania respondsToSelector
- 9. Dlaczego nie jest dozwolone tworzenie stałej datetime w .net?
- 10. Dlaczego usuwanie nie jest dozwolone w trybie ścisłym Javascript5?
- 11. Czy lotny jest potrzebny, w przypadku tylko zsynchronizowanego dostępu
- 12. Czy w klasie istnieje wiele nazw dynamicznych metod?
- 13. Dlaczego modyfikatory są dozwolone w przypadku pakietu, który wydaje się nie działać?
- 14. Dlaczego funkcja OnItemSelectedListener jest wywoływana tylko w przypadku zmiany elementu, ale nie w przypadku każdego wyboru użytkownika?
- 15. Pomijanie niejawne powraca w Swift
- 16. Dlaczego `zerowe jest zdefiniowany jako` przypadku object`
- 17. tylko wstawić numery w Spinner Kontroli
- 18. Brak kontroli dostępu w przypadku braku odpowiedzi przy pierwszej odpowiedzi
- 19. Dlaczego większość metod java.util.Date jest przestarzała?
- 20. Pomijanie kolumny w FileHelper
- 21. Dlaczego nie są dozwolone statyczne pływaki const?
- 22. scanf Pomijanie
- 23. Pomijanie testu w Qunit
- 24. Sprawdzanie widoczności metody w PHP
- 25. Dlaczego w tym przypadku gccgo jest wolniejsze niż gc?
- 26. Kompilacja pakietu WebPack tylko w przypadku zmiany
- 27. Hook jquery działa tylko w przypadku kliknięcia?
- 28. node.js: setInterval() pomijanie połączeń
- 29. Dozwolone kropki i przecinki w liczbach, nie tylko po przecinku
- 30. Czy skrobanie w Internecie jest dozwolone?
- asocjacja, ponieważ nie jest związana z Microsoft Unity. Możesz przeczytać ten post na blogu, http://davedewinter.com/2010/11/21/tip-22-dynamicmethods-in-partial-trust/ To wymaga pewnych uprawnień, aby to zrobić. Dlatego jeśli chcesz ograniczyć takie próby, możesz. –