2012-01-27 2 views
8

He estado usando Visual Studio por un tiempo y me molesta cada vez que trabajo con Classes. El problema es que cuando creo un objeto de una clase, tiendo a ver que los miembros privados pertenecen a esa clase y no quiero, porque si creara una clase con más de 10 variables privadas, entonces sería una pesadilla. , debe haber una forma de ocultar a los miembros privados, Si hay alguna forma, ¿podría compartirla conmigo? Gracias :)¿Cómo ocultar miembros privados de una clase?

EDIT:

Aquí está una imagen que le ayudará a entender lo que estoy hablando,

por ejemplo, aquí tengo 2 variables privadas de LinkedList class (curSize y head) No podré modificarlos desde main así que no tiene sentido verlos (¿está?) ¿Cómo puedo ocultarlos sin alterar mi código? ¿hay alguna configuración para eso en Visual Studio?

+0

Es difícil ver cómo eso podría ser un problema si hablamos del código fuente. Simplemente coloque las partes privadas al final de la clase. Si realmente está hablando del depurador, bueno, es su trabajo mostrar el estado del objeto. –

+0

¿Qué idioma? si estás hablando de C#, sé que también puedes usar clases parciales para dividir a los miembros de una clase en varios archivos. – 000

+0

Si está hablando de la lista desplegable de finalización automática, sigue las reglas de accesibilidad, de modo que los miembros privados de un objeto de tipo A pueden acceder a cualquier otro objeto de tipo A. – 000

Respuesta

4

Desafortunadamente, esto no es posible en la versión actual de Visual Studio. En C++, la lista de IntelliSense no está filtrada por accesibilidad o alcance. Por lo tanto, los miembros privados aún se muestran incluso cuando su código no los puede acceder. No hay configuraciones para modificar este comportamiento, tampoco.

Simplemente tiene que confiar en el icono de candado para indicar que son privados y, por lo tanto, inaccesibles. Todos esos pequeños iconos en la ventana de IntelliSense do have a meaning, ya sabes.

Pero parece que esta característica podría venir en la próxima versión de Visual Studio (VS11). MSDN says:

Lista de usuarios Mejoras. El menú desplegable Lista de Miembros aparece automáticamente a medida que ingresa el código en el editor de código. Los resultados se filtran, de modo que solo se muestren los miembros relevantes mientras escribe. Puede controlar el tipo de lógica de filtrado utilizada por la Lista de miembros en el cuadro de diálogo Opciones en Editor de texto, C/C++, Avanzado.

Tan tonto como es, estoy bastante entusiasmado con esto también. Junto con otras cosas interesantes como mejor resaltado de sintaxis y resaltado de referencia. El Developer Preview ya salió, por lo que podría intentar comenzar a usarlo si lo desea, pero puede que no esté listo para el horario de máxima audiencia. Y esto es una especie de pésima razón para actualizar ...

Alternativamente, podría invertir en Visual Assist X, que es una extensión disponible para múltiples versiones de Visual Studio que agrega muchas funciones de conveniencia al C++ IDE y, pertinentemente, mejora el filtrado de IntelliSense. No es gratis, pero es bastante asombroso para los desarrolladores de C++, y si no fuera pobre/quiebra/barato, definitivamente lo compraría yo mismo.

+1

No, todavía no apareció en VS 2012 RC. Supongo que tendremos que esperar a Visual Studio 2014 antes de obtener una función tan simple. Si solo el equipo no estuviera tan ocupado con UI fea y eliminara todo el color ... –

4

Puede utilizar regiones, así:

class MyClass { 

    #region Private Variables 

    private int x; 
    private int y; 
    private int z; 

    #endregion 

} 

Visual Studio mostrará un poco de - junto a la línea #region. Haz clic para ocultar las variables.

+0

¡Gracias por su respuesta! :) pero ¿hay alguna manera de hacerlo sin alterar mi código fuente? (como una configuración de Visual Studio para mostrar/ocultar miembros privados de una clase) – Malkavian

+0

@ Malkavian Tengo serias dudas de que exista una, porque no es fácil de hacer: sus variables privadas podrían diseminarse a través de su código, identificando así regiones que se pueden colapsar automáticamente sería bastante problemático – dasblinkenlight

+0

Tendría que usar '#pragma region' en C++, y eso no impedirá que IntelliSense muestre a los miembros privados (pero me doy cuenta de que respondió antes de que se editara la pregunta). –

5

Esta podría no ser la mejor respuesta ni es una respuesta bonita, pero el trabajo ya está hecho y si puedes vivir con un pequeño cambio de sintaxis, definitivamente funcionará.Un truco que aprendí al observar clases std como std :: vector es que denotan miembros privados con el prefijo _, forzando así a todos los miembros privados hasta el fondo del intellisense. No los elimina de la lista, pero los moverá a la base para que no te molesten cuando estás desplazándote por la lista. Aquí hay un ejemplo:

class SomeClass{ 
public: 
    int myPublicMemeber; 
private: 
    int _myPrivateMember; 
}; 
+0

guau truco, definitivamente consideraré usarlo cuando necesite ocultar a los miembros privados ¡Gracias por tu respuesta! – Malkavian

Cuestiones relacionadas