acceder a miembros no públicos

programación


¿Cómo accedemos a miembros no públicos?

Tengo un objeto llamado dosisSugerencias que tiene un miembro no público llamado “frecuencias”

Quiero acceder al mismo.

Por favor ayudame en esto

Solución 1

Básicamente, tenemos 4 modificadores de acceso en C#. públicos, protegidos, internos y privados. Aquí están las definiciones de cada modificador:

1. El público [^] La palabra clave es un modificador de acceso para tipos y miembros de tipo. El acceso público es el nivel de acceso más permisivo. No existen restricciones para acceder a miembros públicos.

2. El protegido[^] La palabra clave es un modificador de acceso de miembros. Se puede acceder a un miembro protegido desde la clase en la que está declarado y desde cualquier clase derivada de la clase que declaró este miembro.

3. El interno[^] La palabra clave es un modificador de acceso para tipos y miembros de tipo. Solo se puede acceder a los miembros internos dentro de archivos del mismo ensamblaje. Un uso común del acceso interno es en el desarrollo basado en componentes porque permite que un grupo de componentes cooperen de manera privada sin estar expuestos al resto del código de la aplicación. Por ejemplo, un marco para crear interfaces gráficas de usuario podría proporcionar clases de Control y Formulario que cooperen utilizando miembros con acceso interno. Dado que estos miembros son internos, no están expuestos al código que utiliza el marco.

4. El privado[^] La palabra clave es un modificador de acceso de miembros. El acceso privado es el nivel de acceso menos permisivo. Los miembros privados son accesibles sólo dentro del cuerpo de la clase o la estructura en la que están declarados.

En resumen, dependiendo de la variable no pública, existen diferentes niveles de accesibilidad para sus miembros.

Solución 3

Sólo hay una forma de acceder a miembros privados: Reflexión. El problema es que este método es mucho menos soportable. Por ejemplo, puede buscar un miembro por su nombre, pero si escribe mal la cadena o el nombre se cambia más tarde, la verificación en tiempo de compilación no le avisará: no encontrará el miembro. Puede encontrar todos los miembros colectivamente como una matriz polimorfa de miembros o por separado todos los campos, todas las propiedades, todos los eventos, todos los métodos, todos los constructores o interfaces implementadas. Puede limitar la búsqueda por miembros públicos o no públicos.

Utilice los siguientes métodos de System.Type: FindInterfaces, GetInterface, GetInterfaces, GetMember, GetMembers, GetMethod, GetMethods, GetProperty, GetProperties, GetEvent, GetEvents, GetConstructorImpl, GetConstructor.

Ver http://msdn.microsoft.com/en-us/library/system.type.aspx[^].

Para encontrar métodos no públicos, debe utilizar las versiones de “Get...“método usando System.Reflection.BindingFlags parámetro; usar System.Reflection.BindingFlags.NonPublic o System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public

-SA

Solución 2

Crea una Propiedad Pública y podrás acceder a ella.

Solución 39

La respuesta simple es que la necesidad de acceder a un miembro privado es una error, un defecto de diseño.

Una estrategia utilizada para permitir diferentes niveles de acceso a los métodos/estados internos de las clases es abordar los problemas de seguridad a nivel del sistema operativo (grupos, permisos, usuarios).

Piense en cómo los inicios de sesión en Internet pueden mantener los derechos de usuario y administrador para modificar el código; sobre cómo acceder a bases de datos seguras con distintos niveles de permiso de lectura/escritura.

Otra estrategia es pasar un código de seguridad de algún tipo en el constructor de la Clase: eso siempre es un riesgo para la seguridad.

Si no escribiste el código, no puedes modificarlo, etc., estás hackear el código… una tarea muy indeseable.

コメント

タイトルとURLをコピーしました