Существует принципиальная разница между исправлением сохраненного модуля и использованием Reflection для доступа к закрытым членам без изменения сохраненных классов.
Как правило, нет абсолютной безопасности. Безопасность всегда зависит от того, насколько тяжела работа злоумышленника. В лучшем случае успешная атака требует гораздо больше работы, чем то, что может получить от нее злоумышленник.
Если у вас есть доступ к коду, включая возможность изменить его или создать измененную копию, все ставки в любом случае отключены.
Но основной упор делается не на такую безопасность, а на то, чтобы помочь разработчикам правильно использовать библиотеку. До появления модульной системы любой класс public
и его члены public
или protected
были доступны и даже предлагались IDE, например по завершении кода, автоматически, и потребовалось дополнительное усилие, чтобы сообщить IDE, что некоторые классы или члены не являются частью API и поэтому не должны предлагаться или даже отклоняться при компиляции кода, ссылающегося на них.
В настоящее время с модулем требуется дополнительное усилие, чтобы снова сделать доступными артефакты, не относящиеся к API, что значительно меняет игру. Теперь сделать доступ к артефакту без API снова одинаково сложно, независимо от его модификаторов доступа, так что вы не можете ошибочно думать, что что-то является частью API, просто потому что это public
.
Аналогичным образом, вы не можете ожидать, что разработчик библиотеки будет поддерживать обратную совместимость со взломами Reflection в своих внутренних компонентах. Вы не можете полностью предотвратить такой доступ. Но чем больше усилий потребуется разработчику для создания такого кода, тем лучше он будет знать, что он не в курсе и не может ожидать, что результат продолжит работать в следующей версии.