क्या इंटरफ़ेस के पीछे विधि के वास्तविक कार्यान्वयन के लिए नेविगेट करने का एक तरीका है?


182

विज़ुअल स्टूडियो में, जब आप किसी विधि कॉल को राइट-क्लिक करते हैं, तो आप उस विधि के कार्यान्वयन के लिए एक कक्षा के अंदर जाते हैं, सिवाय इसके कि यदि आप किसी इंटरफ़ेस के माध्यम से इस पद्धति तक पहुँचते हैं: उस स्थिति में आप इंटरफ़ेस पद्धति पर जाते हैं वास्तविक कार्यान्वयन के लिए नहीं।

क्या इस वास्तविक कार्यान्वयन तक पहुंचने के लिए कोई रास्ता / सुझाव (मुख्य शॉर्टकट या कुछ भी) है? अन्यथा आप कुछ टिप्पणी जोड़ने के लिए बस याद करने के लिए फंस गए हैं जहां आपने इसे लागू किया था जो वास्तव में उत्पादक और त्रुटि प्रवण नहीं है!

अपडेट: दिलचस्प जवाब लेकिन मैं वास्तव में संतुष्ट नहीं हूं क्योंकि सभी बोझिल हैं। मैं एक सटीक उदाहरण दूंगा:

IInterface iInterface = someObject;                        
iInterface.someMethod();

वास्तव में अगर विजुअल स्टूडियो विधि कॉल के ऊपर सिर्फ एक पंक्ति देखने के लिए थोड़ा सा चतुर था, तो यह देखेगा कि वास्तविक वस्तु कहां है। और यह मुझे बहुत सारे कीस्ट्रोक्स से बचाएगा और "सभी संदर्भों को ढूंढें" का उपयोग करने से बचें और फिर मेरी थकी हुई आँखों के साथ लाइनों को स्कैन करके देखें कि कौन सी रेखा सही है :)


4
यह कैसे पता चलेगा कि आप किस कार्यान्वयन को देखना चाहते हैं? (मैं सभी ज्ञात कार्यान्वयनों को खोजने के लिए प्रकार पदानुक्रम देख सकता हूं, लेकिन यह एक ReSharper सुविधा हो सकती है, मुझे यकीन नहीं है।)
जॉन स्कीट

1
@ सुपरकैट: डेब्यू करते समय क्या आपका मतलब है?
जॉन स्कीट

2
ReSharper इसे लागू करने की सूची की आपूर्ति करके इसे लागू करता है जहां से वह विशिष्ट का पता नहीं लगा सकता है। अच्छी सुविधा है और मैं इसे "सभी संदर्भ खोजें" के रूप में बहुत याद करता हूं!
फेंटन

4
पहली बार जब मैंने देखा है, जॉन स्कीट कह रहा है "मुझे यकीन नहीं है।" SO में C # प्रश्न के लिए।
मुथु गणपति नाथन

3
@MuthuGanapathyNathan वह शायद यह देखने की कोशिश कर रही थी कि वह एक बार के लिए इंसान है।
Vort3x

जवाबों:


258

मैं निम्नलिखित कार्य करता हूं:

1) विधि पर राइट क्लिक करें और "View call hierarchy" पर क्लिक करें (या Ctrl + K, Ctrl + T) शॉर्टकट

2) "इम्प्लीमेंट्स एक्स" फ़ोल्डर का विस्तार करें जो तब आपको उस पद्धति के सभी कार्यान्वयन दिखाएगा। वहां जाने के लिए एक पर क्लिक करें।

अपेक्षाकृत जल्दी और आसानी से। हालांकि, इंटरफ़ेस के लिए समान रूप से प्रतीत नहीं होता है।


अपडेट : विज़ुअल स्टूडियो 2015 अपडेट 1 के रूप में, एक विधि पर राइट क्लिक करें और कार्यान्वयन पर जाएं। आप टूल> विकल्प> पर्यावरण> कीबोर्ड के माध्यम से इसे कीबोर्ड शॉर्टकट में मैप कर सकते हैं और Edit.GoToImplementation कमांड के लिए खोज कर सकते हैं। डिफ़ॉल्ट शॉर्टकट है Ctrl+F12। ( F12इंटरफ़ेस में नेविगेट करेगा)।



अच्छा वर्कअराउंड। मैं उस से चिपका रहा हूँ जब मेरे पास Resharper नहीं है
Roman

5
मैं चरण 1 को छोड़ सकता / सकती हूं। जहां आप काम कर रहे हैं, वहां से सिर्फ "View call hierarchy" (या शॉर्टकट Ctrl + K, Ctrl + T) देखें और इंटरफ़ेस को एक साथ छोड़ दें। मैं वीएस 2013 में हूं।
टोनी एल।

क्या क्रियान्वयन को रोकने के लिए कोई हॉटकी है? मैंने बिना किसी सफलता के साथ ALT-CTRL-F12 की कोशिश की। (पीक एएलटी-एफ 12 है)
लेवी फुलर

47

VS2013 के साथ कोई भी विधि पर कर्सर रख सकता है, और नेविगेट करने के लिए ... (CTRL +) का उपयोग कर सकता है, और यह उन सभी स्थानों को प्रदर्शित करेगा जहाँ नाम घोषित किया गया है। अलग इंटरफेस एक ही विधि के नाम का उपयोग करता है, तो अच्छी तरह से काम नहीं करता है।

VS2015 अपडेट 1 के साथ अब एक नया शॉर्टकट है जिसे "कार्यान्वयन के लिए जाओ" कहा जाता है।


4
यदि आप रिचार्पर का उपयोग कर रहे हैं तो आप Alt + End का उपयोग कर सकते हैं।
brechtvhb

1
मेरे लिए काम नहीं किया। मैं वेब के लिए वीएस एक्सप्रेस 2013 का उपयोग कर रहा हूं।
अकीरा यामामोटो

मैं इसे कीबोर्ड से अपने हैंडऑफ़ को लेने के बिना सबसे सरल सोलन के रूप में पाता हूं। धन्यवाद रॉल्फ
जेपी विन्जामुरी

1
यह सबसे तेज समाधान संभव है।
mbudnik

@brechtvhb आप इसे कमांड के लिए कीबोर्ड शॉर्टकट को कस्टमाइज़ करके R # के बिना Alt + End भी सेट कर सकते हैं Edit.NavigateTo:)
demoncodemonkey

17

मैंने विज़ुअल स्टूडियो 2010 और विज़ुअल स्टूडियो 2012 के लिए एक निशुल्क एक्सटेंशन बनाया, जिसे इनहेरिटेंस मार्जिन कहा जाता है, साथ ही यह एक विशिष्ट संकेत प्रदान करने के लिए एक स्पष्ट संकेत देता है, जब एक हस्ताक्षर मैच के कारण एक इंटरफ़ेस विधि लागू करता है। वर्तमान संस्करण में, आप नेविगेट करने के लिए आइटमों का मेनू प्राप्त करने के लिए किसी भी ग्लिफ़ पर राइट क्लिक कर सकते हैं।

इनहेरिटेंस मार्जिन - विज़ुअल स्टूडियो गैलरी

स्क्रीनशॉट
(स्रोत: microsoft.com )


3
काम पर परीक्षण समाप्त हो गया है, इस विस्तार की कोशिश की और यह चट्टानों! धन्यवाद दोस्त
जियोर्जियो मिनार्डी

15

फिर "सभी संदर्भ खोजें" पर राइट-क्लिक करें।

यह उन सभी स्थानों के लिए कोड की पंक्ति प्रदर्शित करेगा जहां इंटरफ़ेस इंटरफेस की घोषणा और कार्यान्वयन सहित विधि का उपयोग किया जाता है। फिर आप कोड स्थान पर जाने के लिए लाइन पर क्लिक कर सकते हैं।


यह इम्प्लांटेशन नहीं देता है।
Robaticus

1
@ रोबॉटिकस वास्तव में, यह करता है। यह सबसे सुविधाजनक तरीका नहीं है, लेकिन कार्यान्वयन अन्य सभी संदर्भों के साथ मिश्रित होगा।
रेक्स एम

यह केवल एक चीज है जो मैं अभी कर रहा हूं लेकिन यह सब से ऊपर थकाऊ है क्योंकि मेरे पास अच्छी आंखें नहीं हैं :)
user310291

6
प्रतीकों को खोजने का एक विकल्प कॉल पदानुक्रम है। यह एक फ़ोल्डर संरचना में समूहीकृत तरीके हैं: कॉल्स टू '...', कॉल फ्रॉम '...' और इम्प्लीमेंट्स '...'
फिल कार्सन

4
"सभी संदर्भ खोजें" के लिए शॉर्टकट-की है Shift + F12
इस्माइल

8

आपके पास विजुअल स्टूडियो के संस्करण के आधार पर, मैं सशर्त रूप से "हाँ" कहूँगा।

वर्तमान में मैं अल्टीमेट पर काम कर रहा हूं, और इसे सत्यापित करने के लिए अन्य संस्करण नहीं हैं। उस ने कहा, अल्टीमेट के भीतर, आप कार्यान्वयन खोजने के लिए आर्किटेक्चर एक्सप्लोरर का उपयोग कर सकते हैं। यह राइट क्लिक विधि की तुलना में थोड़ा अधिक शामिल है, लेकिन यहां बताया गया है कि यह कैसे काम करता है।

  • पर जाएं View->Architecture Explorer(या CTRL-W, एन)
  • क्लास व्यू पर क्लिक करें और खुलने वाले सूची में अपना नाम शामिल करें।
  • नाम स्थान सूची के दाईं ओर, एक ऊर्ध्वाधर बटन है जो कहता है Types। इसे क्लिक करें
  • चुनते हैं Interfaces
  • सूची से अपना इंटरफ़ेस चुनें
  • एक ऊर्ध्वाधर बटन जो कहता है Membersफिर दाईं ओर दिखाई देगा। उस बटन पर क्लिक करें
  • चुनें Implemented by(अंडर Inbound Navigation) और वह आपके इंटरफ़ेस के कार्यान्वयन की एक सूची प्रदान करेगा।
  • कार्यान्वयन पर डबल क्लिक करना आपको कक्षा में ले जाएगा।

मुझे पूरा यकीन है कि आर्किटेक्चर एक्सप्लोरर केवल अंतिम संस्करण है, लेकिन यह काम करेगा।
रिचर्ड

धन्यवाद काफी अच्छा है, लेकिन मैं इस संदर्भ में अपने कोड को बदलने के लिए जल्दी होना चाहता हूँ।
user310291

6

2012 अल्टीमेट के भीतर, आप सोल्यूशन एक्सप्लोरर में इंटरफ़ेस खोज सकते हैं। इंटरफ़ेस पर राइट-क्लिक करें और "व्युत्पन्न प्रकार" चुनें, कार्यान्वित वर्ग समाधान एक्सप्लोरर में दिखाए जाएंगे। यकीन नहीं अगर यह एक्सप्रेस में काम करता है।


उस पर ध्यान नहीं दिया। धन्यवाद। <br/> अब यदि केवल समाधान खोजकर्ता को पाने का कोई तरीका है, तो यह वर्तमान में प्रदर्शित फ़ाइल में पेड़ को खोलने के लिए है, इसलिए मेरे पास फ़ाइल के पथ को प्राप्त करने के लिए पहले संपादक के टूलटिप को लाने की आवश्यकता नहीं है ताकि इसे फिर से प्राप्त किया जा सके। स्रोत फ़ाइल में समाधान एक्सप्लोरर के माध्यम से, जहां मैं इंटरफ़ेस के लिए कार्यान्वित-द्वारा की सूची निर्धारित कर सकता हूं ... स्रोत कोड नेविगेशन मुझे लगता है कि एक अधिक महत्वपूर्ण विशेषता बन जाना चाहिए।
जॉर्ज

- बस "Ctrl +], S" कमांड की खोज की जो समाधान एक्सप्लोरर ट्री को वर्तमान संपादित दस्तावेज़ (सक्रिय दस्तावेज़ के साथ सिंक) में विस्तारित करता है। परिणामी फ़ाइल नोड को तब निहित प्रकारों को उजागर करने के लिए विस्तारित किया जा सकता है, जो 'व्युत्पन्न प्रकार' कमांड वाले संदर्भ मेनू तक पहुंचने के लिए सही क्लिक किया जा सकता है। अच्छा लगा।
जॉर्ज

2
@George में, आप विज़ुअल स्टूडियो ALWAYS को टूल -> विकल्प -> प्रोजेक्ट्स और समाधान -> जनरल -> "समाधान एक्सप्लोरर में सक्रिय आइटम ट्रैक कर सकते हैं" के माध्यम से वर्तमान ओपन फ़ाइल को ट्रैक कर सकते हैं
MajorRefactoring

VS2012 प्रीमियम में यह सुविधा भी है। में VS2015 उद्यम, इस ' व्युत्पन्न प्रकार ' सुविधा दो सुविधाओं के लिए विभाजित किया गया है ' व्युत्पन्न प्रकार ' और ' द्वारा कार्यान्वित ', यहां तक कि अच्छे :)
cateyes

6

विजुअल स्टूडियो 2015 अपडेट 1 (दिसंबर 2015 को रिलीज़) ने अब मानक के रूप में एक राइट क्लिक 'गो टू इंप्लीमेंटेशन' फीचर जोड़ा है।


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 में Write के कार्यान्वयन के लिए जाते हैं , तो यह आपको इंटरफ़ेस की घोषणा में ले जाता है, क्योंकि उस समय किसी भी IWrite कार्यान्वयन को विधि में पारित किया जा सकता है।

उदाहरण के लिए कुछ उपकरण जैसे कि ReSharper आपको विधि के सभी उपयोगों को खोजने की पेशकश करता है, ताकि आप आसानी से वांछित कार्यान्वयन पर नेविगेट कर सकें।


1
... और अगर केवल एक ही कार्यान्वयन है, तो R # आपको बिना किसी अतिरिक्त हलचल के सीधे वहां ले जाएगा।
जय

1
यह मुफ़्त नहीं है, लेकिन न तो विजुअल स्टूडियो है। आपका समय कितना कीमती है? :)
जिम अर्नोल्ड

3
ऐसा नहीं है कि मैं भुगतान नहीं करना चाहता, यह सिद्धांत पर है: यह काफी बुनियादी सामान्य ज्ञान विशेषता है, यह शर्मनाक है जब आपको वीएस के लिए पहले से भुगतान करना पड़ता है तो आपको एक बार फिर भुगतान करना होगा :)
user310291

3
@ user310291 जब मैं आपसे सहमत हूं, उस उत्पाद को खरीदना नहीं जो वास्तव में वह सुविधा है जो आप चाहते हैं कि आप उसे बॉक्स से बाहर न प्रदान करने के लिए किसी तीसरे पक्ष को "दंडित" करें, अपना चेहरा काटने के लिए अपनी नाक काट रहा है।
तारकडाल

1
सभी बेकार दिखाने के बिना Resharper इसे प्रदान करता है। आप चयन कर सकते हैं कि आप किस कार्यान्वयन में जाना चाहते हैं।
माइकल जॉयस

4

अपडेट 1 के साथ विजुअल स्टूडियो अब इस सुविधा को लागू करता है! बस सदस्य पर राइट क्लिक करें और आपको "गो टू डेफिनिशन" के तहत "कार्यान्वयन पर जाएं" देखना चाहिए।


2

इस नए मुक्त दृश्य स्टूडियो 2013 एक्सटेंशन की जाँच करें - कार्यान्वयनकर्ता । यह Visual Studio संपादक संदर्भ मेनू में "कार्यान्वयन पर जाएं" विकल्प जोड़ता है।

यह इतना मज़बूती से और तेजी से Resharper के रूप में नहीं है, लेकिन क्या यह ठीक काम है।


2

आप Ctrl + F12शॉर्टकट आजमा सकते हैं । यह आपको क्रियान्वयन की ओर ले जाएगा, जैसे यह आपको F12 का उपयोग करके गैर-इंटरफ़ेस विधियों तक ले जाएगा। [मैंने वीएस 2017 में इसकी कोशिश की, अन्य संस्करणों के बारे में निश्चित नहीं]


1
यह शॉर्टकट टाइपकोड के साथ vscode पर ठीक काम करता है।
ज़ुहैर ताहा

1

विजुअल स्टूडियो आपको केवल यह बता सकता है कि इसे कहाँ संदर्भित किया गया है, लेकिन यह बहुत अधिक मोटे हो सकता है।

अन्य उपकरण हैं जो आपको अपने आवेदन की संरचना के बारे में अधिक बता सकते हैं, जिसमें कौन सा वर्ग लागू होता है कौन सा इंटरफ़ेस, कौन सी विधि ओवरराइड करती है जो अन्य विधि, और इसी तरह। मैं व्यक्तिगत रूप से C / C ++ के लिए अंडरस्टैंडिंग का उपयोग करना पसंद करता हूं।


1

घोषणा पर जाने से इंटरफ़ेस विधि खुल जाएगी। कार्यान्वयन पर जा रहे हैं, आपको ले जाएगा, या आपके लिए सूची देगा, उस इंटरफ़ेस विधि के लिए कोड को लागू करने वाली कक्षाएं (न कि स्वयं इंटरफ़ेस विधि)।

अपडेट करें

जैसा कि जॉन स्कीट ने टिप्पणियों में बताया (और मैं जवाब देने से पहले चूक गया), मैंने जो वर्णन किया है वह एक ReSharper सुविधा हो सकती है ... दृश्य स्टूडियो एक नहीं।


0

नहीं, यह संभव नहीं है, वीएस द्वारा बनाए गए मेमोरी कोड संरचना में विस्तृत होने के बावजूद, कोड नेविगेशन बल्कि ... कंजूस है।

ऐसा लगता है कि एकमात्र विकल्प "खोजें ऑल रेफरेंस" के साथ एक वैश्विक खोज है, जिसके बाद टाइप की गई मूल्य घोषणाओं, रूपांतरणों, या कोड संपादक के अलावा वीएस के भीतर अन्य उपकरणों के उपयोग को बाहर करने के लिए परिणामी सूची की मैन्युअल खोज होती है। सभी बल्कि जटिल और निराशाजनक।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.