Как скрыть закрытые члены класса?

Я использую визуальную студию в течение некоторого времени, и это меня раздражает каждый раз, когда я работаю с классами. Проблема в том, что когда я создаю объект класса, я склонен видеть, что частные члены принадлежат этому классу, и я не хочу, потому что, если я создам класс с 10+ частной переменной, тогда это будет кошмар , должен быть способ скрыть закрытых членов. Если есть способ, не могли бы вы поделиться им со мной? Спасибо :)

РЕДАКТИРОВАТЬ:

Вот картинка, которая поможет вам понять, о чем я говорю,

например, здесь у меня есть 2 частные переменные класса LinkedList (curSize и head), я не смогу изменить их из основного, поэтому нет смысла их видеть (есть ли?). Как я могу скрыть их, не изменяя свой код? есть ли настройка для этого в Visual Studio?


person Malkavian    schedule 27.01.2012    source источник
comment
Трудно понять, как это может быть реальной проблемой, если вы говорите об исходном коде. Просто поместите интимные части в конце класса. Если вы на самом деле говорите об отладчике, то его задача — показывать состояние объекта.   -  person Hans Passant    schedule 27.01.2012
comment
Какой язык? если вы говорите о С#, я знаю, что вы также можете использовать частичные классы, чтобы разбить члены класса на несколько файлов.   -  person 000    schedule 27.01.2012
comment
Если вы говорите о раскрывающемся списке автоматического завершения, он следует правилам доступности, поэтому закрытые члены объекта типа A доступны для любого другого объекта типа A.   -  person 000    schedule 27.01.2012
comment
@Sam Я использую C++, но я ищу способ не отображать закрытые члены, я не хочу изменять свой код, я надеюсь, что может быть способ сделать это, изменив настройки Visual Studio.   -  person Malkavian    schedule 27.01.2012
comment
@Sam Да, я говорю о раскрывающемся списке автоматического завершения, и мой вопрос в том, есть ли способ изменить правила доступности? Бьюсь об заклад, в C++ Standard также есть закрытые члены, но когда вы используете один из их классов, вы не видите закрытых членов.   -  person Malkavian    schedule 27.01.2012
comment
Это особенность. В нем перечислены все переменные/методы, к которым у вас есть доступ в текущем контексте, в котором вы находитесь. Если вы просматриваете код в методе экземпляра, вам показываются переменные в текущей области. Сюда входят параметры метода, локальные переменные, переменные экземпляра, свойства, методы и т. д. Если вы не хотите этого видеть, отключите intellisense. Это не вариант, который вы можете настроить.   -  person Jeff Mercado    schedule 27.01.2012
comment
Кажется, intellisense показывает элементы, недоступные в текущем контексте, и он хочет этого избежать.   -  person David Rodríguez - dribeas    schedule 27.01.2012


Ответы (3)


К сожалению, в текущей версии Visual Studio это невозможно. В C++ список IntelliSense не фильтруется по доступности или области действия. Таким образом, закрытые члены по-прежнему отображаются, даже если ваш код на самом деле не доступен для них. Также нет никаких настроек для настройки этого поведения.

Вам просто нужно полагаться на значок замка, чтобы указать, что они частные и, следовательно, недоступны. Все эти маленькие значки в окне IntelliSense действительно имеют значение знаете ли.

Но похоже, что эта функция может появиться в следующей версии Visual Studio (VS11). MSDN сообщает:

Улучшения списка участников. Раскрывающийся список участников появляется автоматически, когда вы вводите код в редактор кода. Результаты фильтруются, поэтому при вводе отображаются только релевантные элементы. Вы можете управлять типом логики фильтрации, используемой списком участников, в диалоговом окне «Параметры» в разделе «Текстовый редактор», «C/C++», «Дополнительно».

Как бы глупо это ни звучало, я тоже довольно взволнован этим. Наряду с другими интересными вещами, такими как улучшенная подсветка синтаксиса и подсветка ссылок. предварительная версия для разработчиков уже выпущена, поэтому вы можете попробовать начать использовать ее, если вы хотите, но это может быть не готово в прайм-тайм. И это, по общему признанию, своего рода паршивая причина для обновления ...

В качестве альтернативы вы можете инвестировать в Visual Assist X — расширение, доступное для нескольких версий Visual Studio, которое добавляет множество удобных функций для C++ IDE и, соответственно, улучшает фильтрацию IntelliSense. Это не бесплатно, но это довольно круто для разработчиков C++, и если бы я не был бедным/разоренным/дешевым, я бы обязательно купил его сам.

person Cody Gray    schedule 27.01.2012
comment
Нет, до сих пор не появился в VS 2012 RC. Думаю, нам придется дождаться Visual Studio 2014, прежде чем мы получим такую ​​простую функцию. Если бы только команда не была так занята уродством пользовательского интерфейса и удалением всех цветов... - person Cody Gray; 22.07.2012

Это может быть не лучший ответ и не красивый ответ, но он выполняет свою работу, и если вы можете жить с небольшим изменением синтаксиса, то это определенно сработает. Один трюк, который я усвоил, наблюдая за std классами, такими как std::vector, заключается в том, что они обозначают частные члены префиксом _, тем самым заставляя все частные члены находиться в самом низу intellisense. Он не удаляет их из списка, но перемещает их все в самый низ, чтобы они не мешали вам при прокрутке списка. Вот пример:

class SomeClass{
public:
   int myPublicMemeber;
private:
   int _myPrivateMember;
};
person idunnololz    schedule 18.11.2012
comment
вау, хороший трюк, обязательно рассмотрю возможность его использования, когда мне нужно скрыть приватные члены Спасибо за ваш ответ! - person Malkavian; 20.11.2012

Вы можете использовать регионы, например:

class MyClass {

    #region Private Variables

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

    #endregion

}

Visual Studio отобразит маленькую цифру - рядом со строкой #region. Щелкните ее, чтобы скрыть переменные.

person Sergey Kalinichenko    schedule 27.01.2012
comment
Спасибо за ваш ответ! :) но есть ли способ сделать это без изменения моего исходного кода? (например, настройка Visual Studio для отображения/скрытия частных членов класса) - person Malkavian; 27.01.2012
comment
@Malkavian Я серьезно сомневаюсь, что он есть, потому что это непросто сделать: ваши частные переменные могут быть разбросаны по вашему коду, поэтому автоматическое определение сворачиваемых областей будет довольно проблематичным. - person Sergey Kalinichenko; 27.01.2012
comment
Вам придется использовать #pragma region в C++, и это не помешает IntelliSense показывать частные члены (но я понимаю, что вы ответили до того, как вопрос был отредактирован). - person Cody Gray; 27.01.2012
comment
@CodyGray Спасибо за ваш ответ :) Я думал, что это можно сделать, но благодаря dasblinkenlight я понял, что проблема не так тривиальна, как я думал. С положительной стороны, это заставит меня использовать наименьшее количество частных глобальных переменных и поможет мне разумнее использовать OOD :) - person Malkavian; 27.01.2012