2013-04-05 33 views
10

時常瀏覽代碼時,我會遇到這樣的事情:去實現的方法,而不是接口

public class Fruity 
{ 
    private IOrange _Orange; 

    public Fruity() 
    { 
     _Orange = new Orange() as IOrange; 
    } 

    public void PrepareFruit() 
    { 
     return _Orange.Peel(); 
    } 
} 

大,所以現在我想看到的皮爾方法是如何實現的。右鍵單擊該方法會給我Go To Definition,它將我帶到界面存根。

好的,嚴格來說,定義是由接口賦予的,因爲私有變量是以這種方式定義的,但是有沒有什麼辦法可以實現?

當然,找到所有的參考,這是一個調用,接口和結核的散射槍方法。但執行的來源是在這種情況下,很明顯,所以我應該能夠跳過去我還以爲......

顯然,有有時是被很好地描述這裏歧義:

Go to definition on concrete type

但是當然,當實現非常清晰時,應該有一個Go To Implementation選項。

+4

實現可能是值得下載ReSharper的具有「去執行」的試用版和一堆其他的東西,我不我不知道我沒有它的功能。我不知道如何在默認的IDE中做同樣的事情 – NDJ 2013-04-05 09:46:57

+0

根本不清楚。不匹配的大括號表明你沒有發佈全班'果味',所以我們怎麼能知道你沒有一個成員函數來將'_Orange'設置爲'new MangoPretendingToBeAnOrange()'? – hvd 2013-04-05 09:53:28

+0

似乎是重複的:http://stackoverflow.com/questions/4662784/visual-studio-is-there-a-way-to-navigate-to-real-implementation-of-method-behin? – nicodemus13 2013-04-05 09:55:28

回答

7

如果您雙擊或突出顯示Peel並按CTRL+,,您將看到「導航到符號」窗口,該窗口將列出實際實施情況,通常作爲第二項。這是關於在沒有第三方工具的情況下找到它的最快方法。與「查找所有引用」不同,它只顯示方法定義,而不顯示所調用的任何地方。

+0

「Peel」方法可以適用於所有不同的據我所知,水果和「導航到」並不限於實現「IOrange」的類。 +1無論如何,如果方法名稱是明智的,這應該不是一個大問題。 – hvd 2013-04-05 09:55:30

+0

事實上這絕對不是理想的,但它可能是沒有第三方工具的最佳選擇。 – PhonicUK 2013-04-05 09:57:02

2

如果你進入Visual Studio菜單「查看」並選擇「代碼定義窗口」,當你點擊.Peel()時,你可能會看到.Peel()的實現(這並不總是奏效,但試試看) 。

1

當然在Visual Studio中已經存在!它從那以後就在那裏。

右鍵單擊您的代碼(例如:屬性)選擇「查看調用層次結構」。在Call Hierarchy窗口中,選擇Implements文件夾。

你在那裏。爲什麼使用Resharper? 當然並不像從resharper執行那樣複雜,它允許直接在界面上進行詢問,但只有一個屬性或來自該接口的方法應該足夠了。例如:

public interface IModule 
{ 
int Count { get; set; } 
} 

public class Module : Imodule 
{ 
    public int Count {get; set;} 
} 

public class Module2 : Imodule 
{ 
    public int Count {get; set;} 
} 

右擊Count屬性(任何地方 - 類接口的內部或內部),並選擇「查看調用層次結構」,應該說這類實現它,所以整個界面。

剛開始我們都很喜歡瑞瑟爾,隨着時間的推移,我們都討厭它!

+0

是的,這比「查找所有參考文獻」要好一些,但它缺乏「去定義」的直接性,這是我尋找的東西...... – 2013-09-21 13:26:38

0

與Visual Studio> = 2015,你可以跳轉到使用快捷鍵Ctrl + F12