2010-07-21 19 views
5

Mi compañero de trabajo siempre me dice que si declaramos algo como "público", entonces es peligroso porque entonces cualquier programa puede acceder a esa memoria y la solución es usar el modificador de acceso "privado".¿Declarar una variable como "privada" en C# protege la memoria en Windows de que no se acceda por un escáner de memoria?

Me pregunto si esto es de hecho cierto.

+2

Parece que su compañero de trabajo tiene una comprensión pobre de la programación orientada a objetos y es posible que desee adquirir algún material básico de lectura para que pueda comenzar a comprender la naturaleza de la programación. – thaBadDawg

Respuesta

9

Eso es no, de hecho, cierto.

Los modificadores de acceso solo están ahí para ayudar a organizar su código. Solo lo protegen en el sentido de que usted protege su vidrio para evitar que se caiga poniéndolo fuera del alcance del gato.

+1

+1 a Joviee: público/privado son específicos de acceso de clase/miembro. Sin embargo, lo que su compañero de trabajo podría querer transmitir es que si su clase/miembros son declarados como públicos, de hecho pueden acceder a ellos directamente por cualquier otra clase, lo que podría no ser deseable. – InSane

+3

+1 por la verdad, pero agregó algunas explicaciones prácticas para aquellos que no entienden "por qué". –

+0

Gracias Rex M. ¡Una gran analogía también! – MatthewKing

-1

Los modificadores de C# no tienen ninguna influencia sobre la capacidad de memoria: el procesador y la arquitectura del sistema operativo lo controlan.

+1

Si es el caso, esto sería razonablemente gracioso. Si no es el caso, es muy degradante y grosero. –

+0

Es curioso, tu gravatar no muestra la superioridad de tu cuello. De hecho, ¡parece que no tienes cuello en absoluto! Me hace sospechar que tu fanfarronería está ocultando algo ... – Will

+0

+1: Me pregunto lo mismo. –

2

public y private los modificadores de acceso solo tienen que ver con la visibilidad de esas estructuras (clases, método o variables) a otras clases dentro de la misma aplicación. La protección de la memoria entre los procesos y los usuarios es impuesta por el sistema operativo. En el caso de Windows, garantiza que los procesos/subprocesos de nivel no de administrador (y anillo de sistema) no tengan acceso a la memoria que no está explícitamente compartida (como la memoria compartida) con permisos abiertos. En realidad, Windows permite que los procesos otorguen derechos muy específicos a áreas específicas de la memoria, pero esto no se proporciona en la definición de lenguaje de C#. Necesitará acceder a las API del sistema para controlar otorgar ese tipo de acceso a bloques específicos de memoria; de forma predeterminada, todos los bloques de memoria están protegidos por el sistema operativo.

Ahora, si el escáner de memoria se ejecuta en anillo-0 o con privilegios elevados específicos, no hay nada que pueda hacer en su proceso para bloquear ese acceso.

+0

En realidad, los procesos de usuario normal generalmente también tienen acceso a la memoria de otros procesos con el mismo nivel de usuario/integridad. – SamB

Cuestiones relacionadas