Czy można zastąpić metodę prywatną za pomocą programu Reflection w .NET 3.5?Przesłanianie metody prywatnej za pomocą Reflection
Odpowiedz
Cóż, musi być virtual
, aby można było go przesłonić (pisząc typ dynamiczny, który dziedziczy z klasy), i nie można mieć private virtual
(to nie ma sensu). Być może zastąpiłeś internal virtual
, ale podejrzewam, że nawet to może mieć wpływ na bezpieczeństwo. Tak więc ostatecznie powiedziałbym "nie".
Nie za pomocą refleksji. Musisz użyć jakiegoś AOP.
Nie za pomocą samego Odbicia. Być może najlepsze, co możesz zrobić, to użyć Reflection, w połączeniu z Reflection.Emit lub CodeDom, aby skopiować klasę do nowej przestrzeni nazw. Gdy natrafisz na prywatną metodę, którą chcesz zastąpić, nie kopiujesz jej, emitujesz zamiennik.
Istnieje jednak wiele technik, których może użyć programista, co sprawia, że ta technika jest znacznie, dużo trudniejsza. Łamanie implementacji klasy na wiele klas prywatnych lub wewnętrznych jest jednym z takich.
Uwaga: używając CodeDom, musisz zbudować wykres w pamięci, skompilować go, a następnie załadować wynikowy zestaw.
To prawdopodobnie więcej kłopotów niż jest warte.
Innym sposobem na to byłoby użycie Reflector, aby zdemontować klasę, pobrać kod i zbudować własną klasę za pomocą metody replace. Znów istnieją poważne techniczne i prawne przeszkody do przezwyciężenia. Możesz się wiele nauczyć z tego zdemontowanego kodu.
Typemock Isolator prawdopodobnie będzie w stanie to zrobić, ale robi to poprzez interfejsy API profilera .NET (zgodnie z Royem Osherove w The Art of Unit Testing).
- 1. Przesłanianie metody za pomocą obiektu
- 2. JUnit Test Case za pomocą metody prywatnej w algorytmie Dijkstra
- 3. Przesłanianie właściwości za pomocą atrybutu
- 4. Zadzwoń do prywatnej metody klasy z metody prywatnej instancji
- 5. Przesłanianie metody w DLL przy użyciu refleksji
- 6. C# Przesłanianie metody GetHashCode
- 7. Wywołanie prywatnej metody xxx za pomocą self.xxx() z innej prywatnej metody powodującej błąd "prywatna metoda" xxx "o nazwie"
- 8. Uzyskiwanie nazwy klasy nadrzędnej za pomocą Reflection
- 9. Czy mogę uzyskać wartość własności prywatnej z Reflection?
- 10. Model Django, Przesłanianie metody składowania lub metody niestandardowej za pomocą właściwości
- 11. Przekierowanie Laravel z prywatnej metody
- 12. Przesłanianie metody statyczne w Pythonie
- 13. Reflection gradienty za pomocą CSS w Android Browser
- 14. Pobieranie nazw/wartości odziedziczonych atrybutów za pomocą Java Reflection
- 15. Generowanie obiektu dynamicznego ze słownika za pomocą C# Reflection
- 16. Dlaczego nie można zmienić Type.Delimiter za pomocą Reflection?
- 17. Znaleźć wszystkie przestrzenie nazw w złożeniu za pomocą Reflection (DotNET)
- 18. Znajdowanie klasy wyliczeniowej za pomocą Reflection w Javie
- 19. Jak ustawić Vaues do zagnieżdżonej własności za pomocą C# Reflection.?
- 20. Jak ustawić wartość pola w module VB.NET za pomocą Reflection?
- 21. Przesłanianie metody variadic w celu-c
- 22. przesłanianie metody przy użyciu częściowej klasy
- 23. Wywołanie metody instancji prywatnej z metody klasy w Ruby
- 24. KeyNotFoundException za pomocą metody HtmlEntity.DeEntitize()
- 25. Jak mogę uprościć wywołanie metody rozszerzenia Linq za pomocą odbicia?
- 26. java.lang.NoSuchFieldError: REFLECTION
- 27. Przesłanianie hasłem
- 28. Czy istnieje sposób na ustawienie prywatnej/chronionej właściwości statycznej za pomocą klas odbicia?
- 29. Java Reflection - Uzyskaj listę pakietów
- 30. Czy zalecenie Resharpera uczynienia mojej prywatnej metody statyczną dobrą rekomendacją?
... lub możesz się niczego nie nauczyć, jeśli kod jest zaciemniony. –
z was może się dowiedzieć, że jakiś kod jest zaciemniony :-) –