Как я могу сказать, какие методы класса не используются? - PullRequest
1 голос
/ 09 февраля 2009

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

В любом случае, кроме использования find для каждого метода, можно посмотреть, что и где используется?

Я хотел бы удалить свои методы, которые не используются. Спасибо.

Я использую Visual Studio 2008 Express.

Ответы [ 8 ]

9 голосов
/ 09 февраля 2009

Вы можете выбрать «Найти все ссылки» в контекстном меню, если щелкнуть правой кнопкой мыши название метода.

2 голосов
/ 09 февраля 2009

Один из способов, которыми я иногда занимаюсь, - оставить прототипы в определении класса, но затем удалить реализации (окружить их #if 0 и #endif), а затем создать приложение. Компоновщик перечислит любые методы, которые ему нужно найти, а также откуда они вызываются. Любые методы, не перечисленные в списке, никем не вызываются.

Обратите внимание, что это не относится к Visual Studio, оно работает для любого проекта C / C ++.

1 голос
/ 09 февраля 2009

Дядя Боб и команда выполнили хорошее упражнение, чтобы объяснить принцип разделения интерфейса, который делает именно то, что вам нужно.

Сначала создайте пустой интерфейс. Во-вторых, заставьте ваш класс реализовать указанный интерфейс. Наконец, измените экземпляры вашего класса на интерфейс. При компиляции он покажет вам, какие методы вам нужно реализовать, или, другими словами, какие методы на самом деле используются.

1 голос
/ 09 февраля 2009

Вы можете переименовать все методы (поместить xxx перед именем) и затем попытаться перекомпилировать. За каждый используемый метод вы получите ошибку. Переименуйте связанный метод обратно в правильное имя и попробуйте снова скомпилировать.

После того, как вы закончили - все неиспользуемые методы начинаются с 'xxx'.

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

1 голос
/ 09 февраля 2009

Вы всегда можете их закомментировать и попробовать перекомпилировать. Компилятор сообщит вам, чего не хватает.

1 голос
/ 09 февраля 2009

Если вы используете управляемый язык, невозможно определить все функции, которые будут обязательно использоваться. Вы можете выполнить «Найти все ссылки» для каждой функции в вашем коде, и это даст вам высокую степень достоверности для каждой функции, которая прямо и статически связана с кодом.

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

C ++ здесь действительно не лучше. Метод можно связать нестатически, используя магию указателя и смещения.

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

1 голос
/ 09 февраля 2009

Простой, тупой метод, используемый простыми, глупыми людьми, такими как я:

Добавьте XX к каждому имени метода, например, FooXX, и скомпилируйте.

Когда компилятор говорит, что Foo отсутствует, удалите XX из Foo. Продолжайте делать это, пока у вас не останется пропавших ссылок.

Затем удалите все методы с XX в названии.

Но метод "найти все ссылки" лучше.

0 голосов
/ 09 февраля 2009

Щелкните правой кнопкой мыши имя метода в Visual Studio и выберите «Найти использование»? или найти расширенное использование?

Я просто не уверен, является ли это основной функцией VS или она исходит от моего ReSharper. Но это как минимум для меня: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...