인터페이스의 배후에 있는 실제 방식의 실장에 네비게이트 할 수 있는 방법이 있습니까?
Visual Studio에서는 메서드콜을 우클릭하면 클래스 내에서 해당 메서드의 구현으로 넘어갑니다(인터페이스를 통해 이 메서드에 액세스하는 경우 제외).이 경우 실제 구현이 아닌 인터페이스 메서드로 넘어갑니다.
이 실제 구현에 접근할 수 있는 방법이나 힌트(키숏컷 등)가 있습니까?그렇지 않으면 코멘트를 추가해야 합니다.어디서 실장했는지 기억하기 위해서입니다만, 실제로는 생산성이 없고, 에러가 생기기 쉽습니다.
업데이트: 흥미로운 답변입니다만, 모두 번거롭기 때문에 그다지 만족할 수 없습니다.정확한 예를 들어보겠습니다.
IInterface iInterface = someObject;
iInterface.someMethod();
실제로 Visual Studio가 메서드 호출보다 한 줄만 위에 표시해도 실제 객체가 어디에 있는지 알 수 있습니다.이렇게 하면 키 입력을 많이 줄일 수 있고 "모든 참조 검색"을 사용하지 않아도 되며, 피곤한 눈으로 행을 스캔하여 올바른 행을 확인할 수 있습니다.
다음을 수행합니다.
1) 메서드를 오른쪽 클릭하여 [View call hierarchy](또는 숏컷 Ctrl+K, Ctrl+T)을 클릭합니다.
2) [Implements x]폴더를 전개하면, 그 방법의 모든 실장이 표시됩니다.여기를 클릭해 주세요.
비교적 빠르고 간단합니다.인터페이스 자체에 해당하는 것은 없는 것 같지만, 짜증나게도.
업데이트: Visual Studio 2015 업데이트 1에서 메서드를 마우스 오른쪽 버튼으로 클릭하고 구현으로 이동을 선택합니다.[ Tools ] > [ Options ]> [ Environment ]> [ Keyboard ]를 사용하여 키보드숏컷에 매핑하여 [Edit]를 검색할 수도 있습니다.GoToImplementation 명령어기본 숏컷은 다음과 같습니다.Ctrl+F12
( . )F12
인터페이스로 이동합니다).
VS2013에서는 메서드 위에 커서를 놓고 Navigate To...(CTRL+)를 사용하면 이름이 선언된 모든 위치가 표시됩니다.다른 인터페이스가 같은 메서드명을 사용하고 있는 경우는, 정상적으로 동작하지 않습니다.
VS2015 업데이트 1에는 "구현으로 이동"이라는 새로운 단축키가 있습니다.
이 특정 기능을 제공하기 위해 Visual Studio 2010 및 Visual Studio 2012에 대한 무료 확장을 만들었으며 서명 일치로 인해 메서드가 인터페이스 메서드를 구현했을 때 명확한 표시를 제공했습니다.현재 버전에서는 아무 글리프나 마우스 오른쪽 버튼으로 클릭하여 탐색할 항목의 메뉴를 볼 수 있습니다.
(출처 : microsoft.com )
[ Find All References ](모든 참조 검색)을 오른쪽 클릭합니다.
인터페이스 선언 및 인터페이스 메서드의 구현을 포함하여 메서드가 사용되는 모든 장소에 대한 코드 행이 표시됩니다.그런 다음 선을 클릭하여 코드 위치로 이동할 수 있습니다.
Visual Studio 2015 업데이트 - 릴리즈 1
하시면 됩니다.Edit.GoToImplementation
+로
를 사용한 비인터페이스 방식으로 이어지는 것과 마찬가지로 구현으로 이어집니다.
가지고 계신 Visual Studio 버전에 따라 조건부로 '네'라고 대답하겠습니다.
현재 Ultimate에서 운영 중이며 이를 확인할 수 있는 다른 버전은 없습니다.즉, Ultimate에서는 Architecture Explorer를 사용하여 구현을 검색할 수 있습니다.오른쪽 클릭 방법보다 조금 더 복잡하지만, 작동 방식은 다음과 같습니다.
- ★★★★★★★★★★★★★★★로 이동
View->Architecture Explorer
CTRL-W,CTRL-W, N) - Class View를 클릭하여 열리는 목록에서 인터페이스를 포함하는 네임스페이스를 찾습니다.
- 목록 .
Types
[ ]을 클릭합니다. - 선택합니다.
Interfaces
- 목록에서 인터페이스를 선택합니다.
- 는 세로로, '로 하다'라고 되어 .
Members
이치노을 클릭해 주세요. - [ ] 를 합니다.
Implemented by
(아래(아래).Inbound Navigation
를 참조하면, 인터페이스의 실장 리스트가 표시됩니다. - 구현을 더블 클릭하면 클래스로 이동합니다.
Visual Studio 2015 Update 1(2015년 12월 출시)은 이제 마우스 오른쪽 버튼 'Go To Implementation' 기능을 표준으로 추가했습니다.
2012 Ultimate에서는 솔루션 탐색기에서 인터페이스를 검색할 수 있습니다.인터페이스를 오른쪽 클릭하여 [Derived Types]를 선택하면 구현된 클래스가 솔루션 탐색기에 표시됩니다.급행열차에서도 잘 되는지 모르겠네요.
Resharper를 사용하고 계신 분은 Ctrl + F12를 누르면 클래스 메서드로 바로 이동합니다!
이건 불가능해.설명하신 내용은 인터페이스가 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();
}
}
를 사용하는 경우 Write In Use 구현으로 이동합니다.IWrite에서는 인터페이스의 선언으로 이동합니다.그 시점에서는, IWrite 실장 중 하나가 메서드에 건네질 가능성이 있기 때문입니다.
다행히 ReSharper와 같은 일부 툴에서는 원하는 구현으로 쉽게 이동할 수 있도록 메서드의 모든 사용 방법을 찾을 수 있습니다.
Visual Studio 업데이트 1에서 이 기능을 구현했습니다.구성원을 마우스 오른쪽 버튼으로 클릭하면 "정의로 이동" 바로 아래에 "구현으로 이동"이 표시됩니다.
새로운 무료 Visual Studio 2013 Extension - Implementator를 확인하십시오.Visual Studio 편집기의 상황에 맞는 메뉴에 "구현으로 이동" 옵션을 추가합니다.
Resharper만큼 안정적이고 빠르지는 않지만, 일은 잘 되고 있습니다.
Visual Studio는 참조 위치만 알려줄 수 있지만 너무 거칠 수 있습니다.
어떤 클래스가 어떤 인터페이스를 구현하는지, 어떤 메서드가 어떤 메서드를 덮어쓰는지 등 응용 프로그램의 구조에 대해 더 자세히 알 수 있는 다른 툴이 있습니다.저는 개인적으로 Understand For C/C++를 사용하는 것을 선호합니다.
선언으로 이동하면 인터페이스 메서드가 열립니다.실장으로 이동하면 (인터페이스 메서드 자체가 아닌) 그 인터페이스 메서드의 코드를 실장하는 클래스가 표시됩니다.
갱신하다
Jon Sket이 코멘트에서 지적한 바와 같이 (답변 전에 놓쳤지만) 지금까지 설명한 기능은 ReSharper 기능일 수 있습니다.Visual Studio가 아닙니다.
아니요. VS에 의해 유지되는 정교한 메모리 코드 구조에도 불구하고 코드 내비게이션은 오히려... 찌릿찌릿합니다.
유일한 대안은 "Find All Reference(모든 참조 검색)"를 사용한 글로벌 검색 후 입력된 값 선언, 변환 등을 제외하거나 VS 내에서 코드 편집기 이외의 다른 도구를 사용하는 것을 수동으로 검색하는 것입니다.모든 것이 다소 복잡하고 실망스럽다.
언급URL : https://stackoverflow.com/questions/4662784/is-there-a-way-to-navigate-to-real-implementation-of-method-behind-an-interface
'programing' 카테고리의 다른 글
SQL Server Management Studio, 실행 시간을 밀리초로 단축하는 방법 (0) | 2023.04.07 |
---|---|
Microsoft SQL Server에 MySQL과 같은 Boolean 데이터 유형이 있습니까? (0) | 2023.04.07 |
SQL Server의 char, nchar, varchar 및 nvarchar의 차이점은 무엇입니까? (0) | 2023.04.07 |
이름이 특정 문자열로 시작하는 모든 테이블을 삭제합니다. (0) | 2023.04.07 |
각도 2 카르마 검정 '구성 요소 이름'이(가) 알려진 요소가 아닙니다. (0) | 2023.04.02 |