Ponieważ readonly
, jak private
, chroni przed Murphy, a nie Machiavelli *.
Używamy readonly
i i wszystkiego, co ogranicza to, co możemy zrobić, głównie dlatego, że mamy nadzieję ograniczyć bardziej niepoprawne, niekonsekwentne lub po prostu głupie rzeczy, niż mamy przydatne i owocne rzeczy.
Ale wciąż jest to tylko zero. Jeśli część pamięci jest ustawiona na liczbę "42", a my uzyskujemy dostęp do niej przez pole tylko do odczytu, to nie była ona tylko do odczytu podczas tworzenia obiektu. Nic nie powstrzyma go przed zmianą, chyba że kompilator dostrzeże "hej, najpierw powiedziałeś, że nie chcesz tego zmienić, teraz próbujesz to zmienić, co daje? Jedna z tych dwóch decyzji musi być zła".
Nie ma obietnicy, że refleks będzie w stanie to zmienić, ale nie ma obietnicy, że tak się nie stanie. Teraz sposób, w jaki działa odbicie i sposób działania w trybie tylko do odczytu, oznacza, że możesz go zmienić. Przynajmniej wymagałoby to wiele pracy (być może z kosztami, które wpływają na nas, użytkowników, a także zespół, który musi wdrożyć tę pracę), aby powstrzymać kogoś, kto prawdopodobnie poszedłby na ten problem, ponieważ sądzili, że dobry powód.
Należy pamiętać, że uprawnienia odnoszące się do refleksji zrobić zatrzymać Machiavellego,
* Ściśle Murphy mówi o dokładnie jak należy projektować rzeczy, aby powstrzymać ludzi przypadkowo Uprawiając katastrofalnego - readonly
jest dobrym przykładem, korki, które mogą” • Fizycznie lepiej podłączyć w niewłaściwy sposób - a Machiavelli uczył, zamiast ćwiczyć techniki.To sprawia, że nawet w przybliżeniu nie jest to tak zwięzłe powiedzenie.
Możesz robić różne rzeczy z refleksją, której normalnie nie możesz zrobić. Na przykład możesz uzyskać/ustawić prywatne pola z innych klas. Jestem niemal pewien, że to nie jest błąd; co do tego, czy jest to pożądane, czy inna historia. – Servy
Aby ukraść cytat, tylko do odczytu jest ochrona przed "Murphy, a nie Machiavelli" –
@Dennis: Inne pytanie tylko pyta, czy jest to możliwe, ten mówi, że jest to możliwe, ale pyta dlaczego (i dlatego jest IMO o wiele bardziej wartościowy niż inny). –