89 votes

Pourquoi est-il encore possible de modifier un membre privé ou d’exécuter une méthode privée en c# à l’aide de la réflexion ?

Je suis récemment tombé sur un problème que j'ai eu l'aide de C#, et il a été résolu par la fixation d'un membre privé à l'aide de la réflexion.

J'ai été stupéfait de découvrir que la définition d'un membre privé/domaine et aussi l'exécution d'une méthode privée sont des choses qui sont permis et possible en C#. Ce n'est pas une question de savoir comment faire ces choses, ils sont bien documentés, ma question est: pourquoi?

Si vous définissez un champ/membre/méthode/privé interne, pourquoi C# comme langage de permettre à ces champs doit être définie en dehors de la portée? Je crois que cela permettrait de lever une exception de quelque sorte. Si la classe voulait être modifié ou mis ne serait-il pas être une méthode ou d'un constructeur?

133voto

Damien_The_Unbeliever Points 102139

Car les modificateurs d’accès sont là pour aider avec la documentation de l’API que vous voulez exposer aux consommateurs, ou à l’attention des héritiers, etc..

Ils ont pas un mécanisme de contrôle de sécurité / d’accès.

64voto

Servy Points 93720

Il est impossible d'empêcher quelqu'un d'être en mesure de le faire. Vous pourrait rendre plus difficile, vous pouvez les forcer à utiliser le code unsafe et de commencer le réglage des bits à l'aveuglette. Après tout, c'est leur programme/de la machine, ils sont autorisés à faire de telles choses.

La conception de la langue est telle qu'elle rend difficile pour vous de se tirer dans le pied et de faire de Mauvaises Choses. Mais il n'est pas impossible, cela pourrait également empêcher les utilisateurs de faire des choses inhabituelles, mais encore souhaitable.

56voto

Eric Lippert Points 300275

La réflexion exige que vous être attribuées essentiellement à plein de confiance. Confiance totale signifie une pleine confiance. Si vous êtes entièrement confiance pour faire la bonne chose, alors pourquoi ne pourrait-il pas de travail?

(En fait, le modèle de sécurité pour la réflexion est en réalité beaucoup plus compliqué que ce que j'ai esquissé ici, mais cela n'affecte pas mon point de vue: que cette capacité est soumis à la politique. Voir les Considérations de Sécurité pour la Réflexion (MSDN) pour un aperçu de la façon dont la réflexion et la politique de sécurité d'interact.)

14voto

Dave Bish Points 7943

Modificateurs de visibilité ne sont pas destinés pour la sécurité.

Ils sont simplement destinés à rendre le travail avec de l’API structurée / codes base plus efficace - quant à pas embourber le programmeur avec guff - et exposer uniquement les choses que les consommateurs devraient se préoccuper.

6voto

Ed Plunkett Points 1579

La réflexion est la façon dont vous interagissez avec le code compilé. Si la réflexion respecté les attentes de la langue de la source de la vie privée, il y aurait besoin d’un autre mécanisme, tout comme elle, qui n’a pas. Les tortues tout en bas.

Commencez par en supposant que ce qu’il fait, c’est ce que c’est censé, puis reconsidérer votre supposition qu’il était incompétent pour tenter de faire quelque chose de différent que personne ne veut faire de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X