2010-07-21 10 views
5

Mon compagnon de travail me dit toujours que si nous déclarons quoi que ce soit comme "public" alors c'est dangereux parce que n'importe quel programme peut accéder à cette mémoire et que la solution est d'utiliser le modificateur d'accès "privé". Je me demande si cela est vrai vrai.Est-ce que la déclaration d'une variable comme "privée" en C# protège la mémoire dans Windows contre l'accès par un scanner de mémoire?

+2

Il semble que votre collègue ait une mauvaise compréhension de la programmation orientée objet et que vous souhaitiez acquérir du matériel de lecture de base pour lui permettre de commencer à comprendre la nature de la programmation. – thaBadDawg

Répondre

9

C'est pas, en fait, c'est vrai.

Les modificateurs d'accès sont uniquement là pour vous aider à organiser votre code. Ils ne le protègent que dans le sens où vous protégez votre verre d'être renversé en le mettant hors de portée du chat.

+1

+1 à Joviee - Public/Privé sont des spécificiers d'accès de classe/membre. Cependant, ce que votre collègue pourrait vouloir dire, c'est que si nos membres/classe sont déclarés publics, ils peuvent en fait être accédés directement par n'importe quelle autre classe qui ne serait pas désirée. – InSane

+3

+1 pour la vérité, mais a ajouté quelques explications pratiques pour ceux qui ne comprennent pas "pourquoi". –

+0

Merci Rex M. Grande analogie, aussi! – MatthewKing

-1

Les modificateurs C# n'ont aucune influence sur l'adressabilité de la mémoire - le processeur et l'architecture OS contrôlent cela.

+1

Si c'est le cas, cela serait raisonnablement drôle. Si ce n'est pas le cas, c'est très humiliant et grossier. –

+0

Drôle, votre gravatar ne montre pas la supériorité de votre tour de cou. En fait, il semble que vous n'avez pas de coude quoi que ce soit! Me fait soupçonner que votre braggadocio cache quelque chose ... – Will

+0

+1: Je me demande la même chose. –

2

public et private les modificateurs d'accès n'ont à voir avec la visibilité de ces structures (classes, méthode ou variables) à d'autres classes au sein de la même application. La protection de la mémoire entre les processus et les utilisateurs est appliquée par le système d'exploitation. Dans le cas de Windows, cela garantit que les processus/threads de niveau non administrateur (et sonneur système) n'ont pas accès à la mémoire qui n'est pas explicitement partagée (telle que la mémoire partagée) avec des autorisations ouvertes. En fait, Windows autorise les processus à accorder des droits très spécifiques à des zones spécifiques de la mémoire, mais cela n'est pas fourni dans la définition du langage C#. Vous devez accéder aux API système pour contrôler l'octroi de ce type d'accès à des blocs de mémoire spécifiques; par défaut tous les blocs de mémoire sont protégés par le système d'exploitation. Maintenant, si le scanner de mémoire est en cours d'exécution dans ring-0 ou avec des privilèges élevés spécifiques, vous ne pouvez rien faire pour bloquer cet accès.

+0

En fait, les processus d'utilisateur normal ont généralement accès à la mémoire d'autres processus ayant le même niveau d'utilisateur/intégrité. – SamB