2009-02-09 8 views
1

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

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

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

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

ответ

9

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

+0

Благодарим вас за помощь – johnny

0

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

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

+0

Я считаю, что это функция Resharper. Я не думаю, что у ванили VS есть это. –

2

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

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

1

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

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

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

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

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

+0

Эй, высоко пять! –

1

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

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

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

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

1

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

1

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

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

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

+0

хорошая точка вокруг круговых ссылок. –

1

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

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

Смежные вопросы