Có cách nào để điều hướng đến việc thực hiện phương thức thực sự đằng sau một giao diện không?


182

Trong Visual Studio, khi bạn bấm chuột phải vào một cuộc gọi phương thức, bạn đi đến việc thực hiện phương thức đó bên trong một lớp trừ khi bạn truy cập phương thức này thông qua một giao diện: trong trường hợp đó bạn đi đến phương thức giao diện không thực hiện thực tế.

Có cách nào / mẹo (phím tắt hoặc bất cứ điều gì) để truy cập triển khai thực tế này không? Nếu không, bạn bị mắc kẹt để thêm một số nhận xét chỉ để nhớ nơi bạn đã thực hiện nó thực sự không hiệu quả và dễ bị lỗi!

Cập nhật: câu trả lời thú vị nhưng tôi không thực sự hài lòng vì tất cả đều cồng kềnh. Tôi sẽ đưa ra một ví dụ chính xác:

IInterface iInterface = someObject;                        
iInterface.someMethod();

Trên thực tế nếu Visual Studio chỉ cần một chút thông minh để nhìn chỉ một dòng phía trên phương thức gọi thì nó sẽ thấy đối tượng thực sự ở đâu. Và điều đó sẽ giúp tôi tiết kiệm rất nhiều tổ hợp phím và tránh sử dụng "tìm tất cả tài liệu tham khảo" và sau đó quét các dòng bằng đôi mắt mệt mỏi của tôi để xem dòng nào chứa đúng dòng :)


4
Làm thế nào nó sẽ biết thực hiện mà bạn muốn xem? (Tôi có thể xem hệ thống phân cấp loại để tìm tất cả các triển khai đã biết, nhưng đó có thể là tính năng ReSharper ... Tôi không chắc chắn.)
Jon Skeet

1
@supercat: Ý bạn là trong khi gỡ lỗi?
Jon Skeet

2
ReSharper thực hiện nó bằng cách cung cấp một danh sách các triển khai để chọn từ nơi nó không thể phát hiện ra cái cụ thể. Tính năng hay và tôi rất nhớ nó vì "Tìm tất cả tài liệu tham khảo" mang lại quá nhiều!
Fenton

4
Lần đầu tiên tôi từng thấy, Jon Skeet đang nói "Tôi không chắc chắn." cho câu hỏi C # trong SO.
Muthu Ganapathy Nathan

3
@MuthuGanapathyNathan Có lẽ anh ấy đã cố gắng trông giống như anh ấy là con người một lần.
Vort3x

Câu trả lời:


258

Tôi làm như sau:

1) Nhấp chuột phải vào phương thức và nhấp vào "Xem phân cấp cuộc gọi" (hoặc phím tắt Ctrl + K, Ctrl + T)

2) Mở rộng thư mục "Implements x", sau đó sẽ hiển thị cho bạn tất cả các cài đặt của phương thức đó. Click vào một để đi đến đó.

Tương đối nhanh chóng và dễ dàng. Khó chịu mặc dù dường như không có tương đương cho chính giao diện.


update : kể từ Visual Studio 2015 update 1, nhấp chuột phải vào một phương thức và chọn đi đến thực hiện. Bạn cũng có thể ánh xạ nó tới phím tắt thông qua Công cụ> Tùy chọn> Môi trường> Bàn phím và tìm kiếm lệnh Edit.GoToImcellenceation. Phím tắt mặc định là Ctrl+F12. ( F12sẽ điều hướng đến giao diện).



Cách giải quyết tốt. Tôi dính vào điều đó khi tôi không có Resharper
Roman

5
Tôi có thể bỏ qua bước 1. Chỉ cần "Xem phân cấp cuộc gọi" (hoặc phím tắt Ctrl + K, Ctrl + T) ngay từ nơi bạn đang làm việc và bỏ qua tất cả giao diện. Tôi đang ở VS 2013.
Tony L.

Có phím nóng nào để Đỉnh thực hiện không? Tôi đã thử ALT-CTRL-F12 nhưng không thành công. (Đỉnh là ALT-F12)
Levi Fuller

47

Với VS2013, người ta có thể đặt con trỏ lên phương thức và sử dụng Điều hướng đến ... (CTRL +,) và nó sẽ hiển thị tất cả các vị trí nơi tên được khai báo. Không hoạt động tốt nếu các giao diện khác nhau sử dụng cùng tên phương thức.

Với Bản cập nhật 1 của VS2015 , giờ đây có một phím tắt mới gọi là "Đi đến thực hiện".


4
Bạn có thể sử dụng Alt + End nếu bạn đang sử dụng tính năng chia sẻ lại.
brechtvhb

1
Không làm việc cho tôi. Tôi đang sử dụng VS Express 2013 cho Web.
Akira Yamamoto

Tôi thấy đây là soln đơn giản nhất, mà không cần rời tay khỏi bàn phím. Cảm ơn Rolf
Jp Vinjamoori

1
Đây là giải pháp nhanh nhất có thể.
mbudnik

@brechtvhb Bạn cũng có thể đặt giá trị này thành Alt + End mà không có R # bằng cách tùy chỉnh phím tắt cho lệnh Edit.NavigateTo:)
demcodemonkey

17

Tôi đã tạo một tiện ích mở rộng miễn phí cho Visual Studio 2010 và Visual Studio 2012 có tên là Kế thừa kế thừa để cung cấp tính năng cụ thể này, cũng như đưa ra một dấu hiệu rõ ràng khi một phương thức thực hiện một phương thức giao diện do khớp chữ ký. Trong phiên bản hiện tại, bạn có thể nhấp chuột phải vào bất kỳ glyph nào để có một menu các mục để điều hướng đến.

Ký quỹ kế thừa - Thư viện Visual Studio

Ảnh chụp màn hình
(nguồn: microsoft.com )


3
Thử nghiệm chia sẻ lại đã hết hạn tại nơi làm việc, đã thử mở rộng này và nó đá! cảm ơn anh chàng
Giorgio Minardi

15

Nhấp chuột phải rồi "Tìm tất cả tài liệu tham khảo".

Điều này sẽ hiển thị dòng mã cho tất cả các vị trí sử dụng phương thức bao gồm khai báo giao diện và triển khai phương thức giao diện. Sau đó, bạn có thể nhấp vào dòng để nhảy đến vị trí mã.


Điều này không cung cấp cho imlement.
Robaticus

1
@Robaticus thực sự, nó làm. Đây không phải là cách thuận tiện nhất, nhưng việc triển khai sẽ được trộn lẫn với tất cả các tài liệu tham khảo khác.
Rex M

Đó là điều duy nhất tôi làm ngay bây giờ nhưng trên hết là mệt mỏi vì tôi không có đôi mắt tốt :)
310291

6
Một cách khác để tìm biểu tượng là hệ thống phân cấp cuộc gọi. Nó có các phương thức được nhóm trong một cấu trúc thư mục: Gọi đến '...', Gọi từ '...' và triển khai '...'
Phil Carson

4
Phím tắt cho "Tìm tất cả tài liệu tham khảo" là Shift + F12.
IsmailS

8

Tùy thuộc vào phiên bản Visual Studio mà bạn có, tôi sẽ nói điều kiện "có".

Tôi hiện đang hoạt động trên Ultimate và không có các phiên bản khác để xác minh điều này. Điều đó nói rằng, trong Ultimate, bạn có thể sử dụng Architecture Explorer để tìm các triển khai. Nó liên quan nhiều hơn một chút so với phương pháp nhấp chuột phải, nhưng đây là cách nó hoạt động.

  • Chuyển đến View->Architecture Explorer(hoặc CTRL-W, N)
  • Nhấp vào Chế độ xem lớp và tìm không gian tên chứa giao diện của bạn trong danh sách mở.
  • Ở bên phải của danh sách không gian tên, là một nút dọc cho biết Types. Ấn vào đây
  • Lựa chọn Interfaces
  • Chọn giao diện của bạn từ danh sách
  • Một nút dọc cho biết Memberssau đó sẽ xuất hiện ở bên phải. Nhấn vào nút đó
  • Chọn Implemented by(dưới Inbound Navigation) và điều đó sẽ cung cấp một danh sách các triển khai giao diện của bạn.
  • Nhấp đúp chuột vào việc thực hiện sẽ đưa bạn đến lớp.

Tôi khá chắc chắn Architecture Explorer chỉ là phiên bản Ultimate, nhưng điều này sẽ hoạt động.
Richard

Cảm ơn khá tốt, tôi đã đưa ra ý kiến ​​nhưng trong bối cảnh này, tôi muốn nhanh chóng thay đổi mã của mình.
310291

6

Trong năm 2012 Ultimate, bạn có thể tìm kiếm giao diện trong explorer giải pháp. Nhấp chuột phải vào giao diện và chọn "Các loại có nguồn gốc", các lớp được triển khai sẽ hiển thị trong trình khám phá giải pháp. Không chắc chắn nếu nó hoạt động trong express.


Không nhận thấy điều đó. Cảm ơn. Bây giờ, nếu chỉ có một cách để trình thám hiểm giải pháp mở cây của nó vào tệp đang hiển thị, thì trước tiên tôi không đưa ra tooltip của trình chỉnh sửa để lấy đường dẫn của tệp để lấy ra rồi điều hướng thông qua trình khám phá giải pháp đến tệp nguồn, nơi tôi có thể xác định danh sách được triển khai cho giao diện ... Điều hướng mã nguồn sẽ trở thành một tính năng quan trọng hơn tôi nghĩ.
George

- Chỉ cần phát hiện ra lệnh "Ctrl +], S" mở rộng cây thám hiểm giải pháp sang tài liệu chỉnh sửa hiện tại (đồng bộ hóa với tài liệu đang hoạt động). Nút tệp kết quả sau đó có thể được mở rộng để hiển thị các loại được chứa mà lần lượt có thể được nhấp chuột phải để truy cập menu ngữ cảnh có chứa lệnh 'Các loại có nguồn gốc'. Đẹp.
George

2
@George, bạn cũng có thể có Visual Studio LUÔN theo dõi tệp đang mở trong trình khám phá giải pháp thông qua Công cụ -> Tùy chọn -> Dự án và Giải pháp -> Chung -> "Theo dõi mục hoạt động trong trình khám phá giải pháp"
MajorRefactoring

VS2012 Premium cũng có tính năng này. Trong VS2015 Enterprise, tính năng ' Loại có nguồn gốc ' này đã được chia thành hai tính năng ' Loại có nguồn gốc ' & ' Được triển khai bởi ', thậm chí còn đẹp hơn :)
cateyes

6

Visual Studio 2015 Update 1 (phát hành tháng 12 năm 2015) hiện đã thêm một nhấp chuột phải vào tính năng 'Đi đến thực hiện' làm tiêu chuẩn.


5

Đối với những người sử dụng Resharper, nhấn CTRL + F12 sẽ khiến bạn trực tiếp đến phương thức lớp!


4

Điều này là không thể. Những gì bạn đang mô tả sẽ có ý nghĩa chỉ khi giao diện bị giới hạn ở 1 lần thực hiện.

Xem xét ví dụ này:

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();
  }
}

Nếu bạn sử dụng, hãy đi đến triển khai Write in UseIWrite, nó sẽ đưa bạn đến phần khai báo giao diện, vì tại thời điểm đó, bất kỳ triển khai IWrite nào cũng có thể được truyền vào phương thức.

Rất may, một số công cụ như ReSharper cung cấp cho bạn để tìm tất cả các cách sử dụng phương thức, vì vậy bạn có thể dễ dàng điều hướng đến việc triển khai mong muốn.


1
Nếu chỉ có một triển khai, R # sẽ đưa bạn đến đó mà không cần phải quảng cáo thêm.
Jay

1
Nó không miễn phí, nhưng Visual Studio cũng không. Bao nhiêu là thời gian của bạn có giá trị? :)
Jim Arnold

3
Không phải là tôi không muốn trả tiền, theo nguyên tắc: đây là tính năng thông thường khá cơ bản, thật đáng tiếc khi bạn phải trả tiền một lần nữa khi bạn đã thanh toán cho VS :)
user 310291

3
@ user 310291 Trong khi tôi đồng ý với bạn, không mua sản phẩm có chính xác tính năng bạn muốn để "trừng phạt" bên thứ ba vì đã không cung cấp nó ra khỏi hộp, đang cắt mũi bạn để làm cay khuôn mặt của bạn.
TarkaDaal

1
Resharper cung cấp điều này mà không phải hiển thị tất cả các công dụng. Bạn có thể chọn thực hiện mà bạn muốn đi đến.
Michael Joyce

4

Visual Studio với Update 1 hiện thực hiện tính năng này! Chỉ cần nhấp chuột phải vào thành viên và bạn sẽ thấy "Đi đến thực hiện" ngay bên dưới "Chuyển đến định nghĩa".


2

Hãy xem phần mở rộng Visual Studio 2013 miễn phí mới này - Người triển khai . Nó thêm tùy chọn "Đi đến thực hiện" vào menu ngữ cảnh của trình soạn thảo Visual Studio.

Nó không quá đáng tin cậy và nhanh như Resharper, nhưng nó hoạt động rất tốt.


2

Bạn có thể thử Ctrl + F12lối tắt. Nó sẽ dẫn bạn đến việc thực hiện giống như nó sẽ dẫn bạn đến các phương thức giao diện không sử dụng F12. [Tôi đã thử nó trong VS 2017, không chắc chắn về các phiên bản khác]


1
phím tắt này hoạt động tốt tại vscode với bản thảo.
Zuhair Taha

1

Visual Studio chỉ có thể cho bạn biết nơi nó được tham chiếu, nhưng điều này có thể quá thô.

Có các công cụ khác có thể cho bạn biết thêm về cấu trúc của ứng dụng của bạn, bao gồm lớp nào thực hiện giao diện nào, phương thức nào ghi đè phương thức nào khác, v.v. Cá nhân tôi thích sử dụng Hiểu cho C / C ++.


1

Đi đến khai báo sẽ mở ra phương thức giao diện. Đi đến phần triển khai, sẽ đưa bạn hoặc liệt kê cho bạn, các lớp triển khai mã cho phương thức giao diện đó (không phải chính phương thức giao diện).

Cập nhật

Như Jon Skeet đã chỉ ra trong các bình luận (và tôi đã bỏ lỡ trước khi trả lời), tính năng tôi đã mô tả có thể là tính năng ReSharper ... không phải là Visual Studio.


0

Không. Điều này là không thể, mặc dù cấu trúc mã bộ nhớ được duy trì bởi VS, điều hướng mã khá ... keo kiệt.

Dường như thay thế duy nhất là tìm kiếm toàn cầu với "Tìm tất cả tham chiếu" theo sau là tìm kiếm thủ công danh sách kết quả để loại trừ khai báo giá trị đã nhập, chuyển đổi, v.v. hoặc sử dụng các công cụ khác trong VS ngoài trình chỉnh sửa mã. Tất cả khá phức tạp và đáng thất vọng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.