인터페이스 뒤에서 메소드의 실제 구현을 탐색하는 방법이 있습니까?


182

Visual Studio에서 메서드 호출을 마우스 오른쪽 단추로 클릭하면 인터페이스를 통해이 메서드에 액세스하는 경우를 제외하고 클래스 내에서 해당 메서드의 구현으로 이동합니다.이 경우 실제 구현이 아닌 인터페이스 메서드로 이동합니다.

이 실제 구현에 액세스하는 방법 / 팁 (키 바로 가기 또는 기타)이 있습니까? 그렇지 않으면 실제로 생산적이고 오류가 발생하지 않는 부분을 구현 한 위치를 기억하기 위해 주석을 추가해야합니다!

업데이트 : 흥미로운 답변이지만 모두 성가 시므로 실제로 만족스럽지 않습니다. 정확한 예를 들겠습니다.

IInterface iInterface = someObject;                        
iInterface.someMethod();

실제로 Visual Studio가 메서드 호출 위의 한 줄만 보는 것이 조금 현명한 경우 실제 개체의 위치를 ​​봅니다. 그리고 그것은 나에게 많은 키 입력을 저장하고 "모든 참조 찾기"를 사용하지 말고 피곤한 눈으로 라인을 스캔하여 어느 라인에 올바른 라인이 있는지 확인하십시오. :)


4
어떤 구현을 보길 원하는지 어떻게 알 수 있습니까? (모든 알려진 구현을 찾기 위해 형식 계층 구조를 볼 수 있지만 ReSharper 기능 일 수 있습니다. 잘 모르겠습니다.)
Jon Skeet

1
@ supercat : 디버깅 중입니까?
Jon Skeet

2
ReSharper는 특정 구현을 탐지 할 수없는 곳에서 선택할 수있는 구현 목록을 제공하여 구현합니다. "모든 참조 찾기"가 너무 많이 제공되므로 멋진 기능이 있습니다.
Fenton

4
내가 처음 본 Jon Skeet은 "잘 모르겠습니다"라고 말합니다. SO의 C # 질문에 대해.
Muthu Ganapathy 네이선

3
@MuthuGanapathyNathan 그는 아마 한 번 인간 인 것처럼 보이려고 노력했을 것입니다.
Vort3x

답변:


258

나는 다음을한다 :

1) 메소드를 마우스 오른쪽 단추로 클릭하고 "콜 계층보기"(또는 단축키 Ctrl + K, Ctrl + T)를 클릭하십시오.

2) "Implements x"폴더를 확장하면 해당 메소드의 모든 구현이 표시됩니다. 거기에 가려면 하나를 클릭하십시오.

비교적 빠르고 쉽습니다. 짜증나게 인터페이스 자체에 해당하는 것으로 보이지 않습니다.


업데이트 : Visual Studio 2015 업데이트 1부터 메소드를 마우스 오른쪽 버튼으로 클릭하고 구현으로 이동을 선택하십시오. 도구> 옵션> 환경> 키보드를 통해 키보드 단축키로 매핑하고 Edit.GoToImplementation 명령을 검색 할 수도 있습니다. 기본 바로 가기는 Ctrl+F12입니다. ( F12인터페이스로 이동합니다).



좋은 해결 방법. 나는 Resharper가 없을 때 그것을 고집합니다
Roman

5
1 단계를 건너 뛸 수 있습니다. 작업중인 위치에서 바로 "호출 계층 구조보기"(또는 바로 가기 Ctrl + K, Ctrl + T) 인터페이스를 모두 건너 뜁니다. 저는 VS 2013에 있습니다.
Tony L.

구현을 피크하기위한 단축키가 있습니까? 나는 성공하지 못한 채 ALT-CTRL-F12를 시도했다. (Peak is ALT-F12)
Levi Fuller

47

VS2013에서는 커서를 메소드 위에 놓고 Navigate To ... (CTRL +,)를 사용하면 이름이 선언 된 모든 위치가 표시됩니다. 다른 인터페이스가 동일한 메소드 이름을 사용하는 경우 제대로 작동하지 않습니다.

함께 VS2015 업데이트 1 "이동으로 구현"이라는 새로운 바로 가기가 지금있다.


4
resharper를 사용하는 경우 Alt + End를 사용할 수 있습니다.
brechtvhb

1
나를 위해 작동하지 않았다. 웹에 VS Express 2013을 사용하고 있습니다.
야마모토 아키라

나는 이것을 키보드에서 손을 떼지 않고 가장 간단한 방법으로 생각합니다. 감사 Rolf
Jp Vinjamoori

1
이것이 가장 빠른 해결책입니다.
mbudnik

@brechtvhb 또한 명령에 대한 키보드 단축키를 사용자 정의하여 R 번호없이 Alt + 엔드가이 설정할 수 있습니다 Edit.NavigateTo:
demoncodemonkey

17

Visual Studio 2010 및 Visual Studio 2012의 Inheritance Margin이라는 무료 확장 프로그램을 만들어이 특정 기능을 제공하고 서명 일치로 인해 메서드가 인터페이스 메서드를 구현할 때 명확하게 표시합니다. 현재 버전에서는 글리프를 마우스 오른쪽 버튼으로 클릭하여 탐색 할 항목 메뉴를 얻을 수 있습니다.

상속 마진-Visual Studio Gallery

스크린 샷
(출처 : microsoft.com )


3
재연 마 시험은 직장에서 만료되었으며이 확장을 시도해 보았습니다. 고마워 친구
Giorgio Minardi

15

마우스 오른쪽 버튼을 클릭 한 다음 "모든 참조 찾기"를 클릭하십시오.

인터페이스 선언 및 인터페이스 메소드 구현을 포함하여 메소드가 사용되는 모든 위치에 대한 코드 줄이 표시됩니다. 그런 다음 줄을 클릭하여 코드 위치로 이동할 수 있습니다.


이것은 영향을주지 않습니다.
Robaticus

1
@Robaticus는 실제로 그렇습니다. 가장 편리한 방법은 아니지만 구현이 다른 모든 참조와 혼합됩니다.
Rex M

그것이 내가 지금하는 유일한 일이지만 눈이 좋지 않기 때문에
무엇보다도 지루합니다.

6
심볼을 찾는 대안은 통화 계층입니다. 대상을 호출 '...'에서 전화 '...'하고 구현합니다 '...':이 폴더 구조로 그룹화 방법이있다
필 카슨

4
"모든 참조 찾기"의 바로 가기 키는 Shift + F12입니다.
IsmailS

8

사용중인 Visual Studio 버전에 따라 조건부 "예"라고 말할 것입니다.

현재 Ultimate에서 작동하고 있으며이를 확인할 다른 버전이 없습니다. 즉, Ultimate 내에서 아키텍처 탐색기를 사용하여 구현을 찾을 수 있습니다. 오른쪽 클릭 방법보다 조금 더 복잡하지만 작동 방법은 다음과 같습니다.

  • 이동 View->Architecture Explorer(또는 CTRL-W, N)
  • 클래스 뷰를 클릭하고 열린 목록에서 인터페이스가 포함 된 네임 스페이스를 찾으십시오.
  • 네임 스페이스 목록의 오른쪽에는이라고 표시된 수직 버튼이 Types있습니다. 이것을 클릭하십시오
  • 고르다 Interfaces
  • 목록에서 인터페이스를 선택하십시오
  • 그러면 수직 버튼이 Members오른쪽에 나타납니다. 그 버튼을 클릭
  • Implemented by(아래에서 Inbound Navigation)를 선택 하면 인터페이스 구현 목록이 제공됩니다.
  • 구현을 두 번 클릭하면 수업으로 이동합니다.

아키텍처 탐색기가 Ultimate 에디션 일 뿐이라고 확신하지만 작동합니다.
Richard

고마워, 나는 엄지 손가락을 올렸지만이 맥락에서 코드를 빠르게 변경하고 싶습니다.
user310291

6

2012 Ultimate 내에서 솔루션 탐색기에서 인터페이스를 검색 할 수 있습니다. 인터페이스를 마우스 오른쪽 버튼으로 클릭하고 "파생 유형"을 선택하면 구현 된 클래스가 솔루션 탐색기에 표시됩니다. 그것이 명시 적으로 작동하는지 확실하지 않습니다.


눈치 채지 못했습니다. 감사. <br/> 이제 솔루션 탐색기가 현재 표시된 파일에 대한 트리를 열 수있는 방법이 있다면 먼저 파일의 경로를 가져 오기 위해 편집기의 툴팁을 가져 와서 파생시킵니다. 솔루션 탐색기를 통해 소스 파일로 인터페이스에 구현 된 목록을 확인할 수 있습니다. 소스 코드 탐색은 더 중요한 기능이되어야합니다.
George

-방금 솔루션 탐색기 트리를 현재 편집 문서 (활성 문서와 동기화)로 확장하는 "Ctrl +], S"명령을 발견했습니다. 그런 다음 결과 파일 노드를 확장하여 포함 된 유형을 표시하고 마우스 오른쪽 버튼을 클릭하여 '파생 유형'명령이 포함 된 상황에 맞는 메뉴에 액세스 할 수 있습니다. 좋은.
George

2
@George, Visual Studio ALWAYS가 도구-> 옵션-> 프로젝트 및 솔루션-> 일반-> "솔루션 탐색기에서 활성 항목 추적"을 통해 솔루션 탐색기에서 현재 열려있는 파일을 항상 추적하도록 할 수 있습니다.
MajorRefactoring

VS2012 Premium에도이 기능이 있습니다. 에서 VS2015 기업이 ' 파생 유형 '기능은 두 가지 기능에 '분할되었습니다 파생 된 유형 ' '& 에 의해 구현 ', 심지어 더 좋은 :)
cateyes

6

2015 년 12 월에 릴리스 된 Visual Studio 2015 업데이트 1은 이제 마우스 오른쪽 단추로 '구현으로 이동'기능을 표준으로 추가했습니다.


5

Resharper를 사용하는 사람들은 CTRL + F12를 누르면 수업 방법으로 바로 갈 수 있습니다!


4

이건 불가능 해. 설명하는 것은 인터페이스가 1 구현으로 제한되는 경우에만 의미가 있습니다.

이 예제를 고려하십시오.

interface IWrite 
{ 
 void Write(); 
}
class A : IWrite { 
  public void Write() { Console.WriteLine("A"); } 
}
class B : IWrite { 
  public void Write() { Console.WriteLine("B"); } 
}
class X : IWrite { 
  private readonly string _x;
  public X(string x) {
    _x = x;
  } 
  public void Write() { Console.WriteLine(_x); } 
}

class UseIWrite()
{
  public void Use(IWrite iwrite) 
  {
     iwrite.Write();
  }
}

당신이 사용하는 경우 구현에 가서 UseIWrite에 쓰기의, 그것 때문에 Iwrite를 구현 어떤 방법으로 전달 될 수있는 시점에서, 인터페이스의 선언으로 이동합니다.

고맙게도 예를 들어 ReSharper와 같은 일부 도구를 사용 하면 메소드의 모든 사용법찾을 수 있으므로 원하는 구현으로 쉽게 이동할 수 있습니다.


1
… 구현이 하나 밖에 없다면, R #은 더 이상 고민하지 않고 바로 데려다 줄 것입니다.
Jay

1
무료는 아니지만 Visual Studio도 마찬가지입니다. 당신의 시간은 얼마입니까? :)
Jim Arnold

3
그것은 지불하고 싶지 않다는 것이 아닙니다. 그것은 원칙입니다. 이것은 매우 기본적인 상식적인 기능이며, VS에 대해 이미 지불했을 때 한 번 더 지불해야한다는 것은 부끄러운
user310291

3
@ user310291 본인에 동의하는 동안 상자에서 제공하지 않은 제 3자를 "처벌"하기 위해 원하는 기능을 정확하게 수행하지 않는 제품을 구매하지 않고 코를 자르면 얼굴이 부러집니다.
TarkaDaal

1
Resharper는 모든 사용법을 보여줄 필요없이 이것을 제공합니다. 당신이 가고 싶은 구현을 선택할 수 있습니다.
Michael Joyce

4

업데이트 1이 포함 된 Visual Studio는 이제이 기능을 구현합니다! 멤버를 마우스 오른쪽 단추로 클릭하면 "정의로 이동"아래에 "구현으로 이동"이 표시됩니다.


2

이 새로운 무료 Visual Studio 2013 Extension- Implementator를 확인하십시오 . "구현으로 이동"옵션을 Visual Studio 편집기 상황에 맞는 메뉴에 추가합니다.

Resharper만큼 믿을 만하고 빠르지는 않지만 잘 작동합니다.


2

Ctrl + F12바로 가기 를 시도 할 수 있습니다 . F12를 사용하여 인터페이스가 아닌 메소드로 연결되는 것처럼 구현하게됩니다. [VS 2017에서 시도했지만 다른 버전에 대해서는 잘 모르겠습니다]


1
이 단축키는 typescript와 vscode에서 잘 작동합니다.
Zuhair Taha '12

1

Visual Studio는 참조 된 위치 만 알려줄 수 있지만 너무 거칠 수 있습니다.

어떤 인터페이스를 구현하는 클래스, 어떤 메서드가 다른 메서드를 지배하는지 등을 포함하여 응용 프로그램의 구조에 대해 더 자세히 알려주는 다른 도구가 있습니다. 개인적으로 Understand For C / C ++를 선호합니다.


1

선언으로 이동하면 인터페이스 메소드가 열립니다. 구현으로 이동하면 인터페이스 메소드 자체가 아닌 해당 인터페이스 메소드에 대한 코드를 구현하는 클래스가 표시됩니다.

최신 정보

Jon Skeet이 주석에서 지적했듯이 (응답하기 전에 놓쳤습니다), 내가 설명한 기능은 Visual Studio 기능이 아닌 ReSharper 기능 일 수 있습니다.


0

아니요. VS에서 유지 관리하는 정교한 메모리 코드 구조에도 불구하고 코드 탐색은 다소 번거 롭습니다.

유일한 대안은 "모든 참조 찾기"를 사용한 전역 검색 다음에 결과 목록을 수동으로 검색하여 유형 값 선언, 변환 등을 제외하거나 VS 내에서 코드 편집기 이외의 다른 도구를 사용하는 것입니다. 다소 복잡하고 실망 스럽습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.