2009-02-09 4 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

단순하고 바보 같은 방법

추가 FooXX 같은 모든 메소드 이름 XX, 컴파일.

컴파일러에서 Foo가 누락되었다고 말하면 Foo에서 XX를 제거하십시오. 누락 된 참조가 없어 질 때까지이 작업을 계속하십시오.

그런 다음 이름이 XX 인 메소드를 모두 제거하십시오.

그러나 "모든 참조 찾기"방법이 더 좋습니다.

+0

안녕하세요! –

1

관리되는 언어를 사용하는 경우 확실히 사용되는 모든 기능을 결정할 수 없습니다. 코드의 모든 함수에 대해 "모든 참조 찾기"를 수행하면 코드에서 명시 적으로 정적으로 바인딩되는 모든 함수에 대해 높은 수준의 신뢰성을 제공합니다.

그러나 반사는 정말 원숭이 렌치를 방정식에 던졌습니다. 런타임에 함수를 바인딩 할 수 있으며 코드에서이를 검색 할 수있는 확실한 방법이 없습니다. 메서드 이름을 선택하는 문자열은 사용자가 제공 한 값을 사용할 수도 있습니다.

C++은 실제로 더 좋지 않습니다. 메서드는 포인터 매직과 오프셋을 사용하여 비 정적으로 바인딩 할 수 있습니다.

요컨대, 사용하는 언어에 관계없이이를 수행하는 어리석은 방법은 없습니다.

1

언제든지 주석 처리하여 다시 컴파일 할 수 있습니다. 컴파일러는 누락 된 부분을 알려줍니다.

1

모든 메서드의 이름을 바꿀 수 있습니다 (이름 앞에 xxx를 붙이십시오). 그런 다음 다시 컴파일하십시오. 사용 된 각 방법에 대해 오류가 발생합니다.관련 메소드의 이름을 올바른 이름으로 다시 변경하고 다시 컴파일하십시오.

끝나면 사용되지 않는 모든 방법은 'xxx'로 시작합니다.

사용하지 않는 다른 메서드를 호출하는 사용되지 않는 메서드가있을 수 있으므로이 작업을 두 번 수행해야합니다.

+0

순환 참조에 대한 좋은 지적. –

1

Uncle Bob and crew 정확히 필요한 작업을 수행하는 인터페이스 분리 원리를 설명하는 데 좋은 연습이 있습니다.

먼저 빈 인터페이스를 만드십시오. 둘째, 문제의 수업을 상기 인터페이스로 구현하십시오. 마지막으로 클래스의 인스턴스를 인터페이스의 인스턴스로 변경하십시오. 컴파일 할 때 어떤 메소드를 구현해야하는지, 즉 실제로 어떤 메소드가 사용되는지 보여줍니다.