มีวิธีนำทางไปยังการใช้งานจริงของวิธีการหลังอินเตอร์เฟสหรือไม่


182

ใน Visual Studio เมื่อคุณคลิกขวาที่การเรียกใช้เมธอดคุณจะไปที่การนำไปใช้ของเมธอดนั้นภายในคลาสยกเว้นถ้าคุณเข้าถึงวิธีนี้ผ่านอินเทอร์เฟซ: ในกรณีนั้นคุณไปที่เมธอดของอินเทอร์เฟซ

มีวิธี / เคล็ดลับ (คีย์ลัดหรืออะไรก็ได้) ในการเข้าถึงการใช้งานจริงหรือไม่? มิฉะนั้นคุณจะติดอยู่เพื่อเพิ่มความคิดเห็นเพียงจำที่คุณได้ใช้มันที่ไม่ได้ผลและข้อผิดพลาดได้ง่าย!

อัปเดต: คำตอบที่น่าสนใจ แต่ฉันไม่ค่อยพอใจเพราะทุกอย่างยุ่งยาก ฉันจะให้ตัวอย่างที่แม่นยำ:

IInterface iInterface = someObject;                        
iInterface.someMethod();

จริง ๆ แล้วถ้า Visual Studio เป็นคนฉลาดเพียงเล็กน้อยที่จะมองเพียงหนึ่งบรรทัดด้านบนวิธีการเรียกมันจะเห็นว่าวัตถุจริงอยู่ที่ไหน และนั่นจะช่วยให้ฉันกดแป้นจำนวนมากและหลีกเลี่ยงการใช้ "ค้นหาการอ้างอิงทั้งหมด" จากนั้นสแกนเส้นด้วยตาที่เหนื่อยล้าของฉันเพื่อดูว่าเส้นไหนมีเส้นที่ถูกต้อง :)


4
จะทราบได้อย่างไรว่าคุณต้องการเห็นการใช้งานระบบใด (ฉันสามารถดูลำดับชั้นของประเภทเพื่อค้นหาการใช้งานที่รู้จักทั้งหมด แต่นั่นอาจเป็นคุณลักษณะ ReSharper ... ฉันไม่แน่ใจ)
Jon Skeet

1
@supercat: คุณหมายถึงในขณะที่การดีบัก?
Jon Skeet

2
ReSharper ใช้มันโดยการจัดหารายการของการใช้งานเพื่อเลือกจากที่มันไม่สามารถตรวจจับสิ่งที่เฉพาะเจาะจง ฟีเจอร์ที่ดีและฉันก็คิดถึงเพราะ "ค้นหาการอ้างอิงทั้งหมด" นำกลับมามากเกินไป!
เฟนตัน

4
เป็นครั้งแรกที่ฉันได้เห็น Jon Skeet พูดว่า "ฉันไม่แน่ใจ" สำหรับคำถาม C # ใน SO
Muthu Ganapathy Nathan

3
@MuthuGanapathyNathan เขาอาจจะพยายามที่จะดูเหมือนว่าเขาเป็นมนุษย์ในครั้งเดียว
Vort3x

คำตอบ:


258

ฉันทำต่อไปนี้:

1) คลิกขวาที่วิธีการและคลิก "ดูลำดับชั้นการโทร" (หรือทางลัด Ctrl + K, Ctrl + T)

2) ขยายโฟลเดอร์ "ใช้ 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 คือ ALT-F12)
Levi Fuller

47

ด้วย VS2013 เราสามารถวางเคอร์เซอร์ไว้เหนือเมธอดและใช้นำทางไปยัง ... (CTRL +,) และมันจะแสดงตำแหน่งทั้งหมดที่มีการประกาศชื่อ ใช้งานไม่ได้หากอินเตอร์เฟสที่ต่างกันใช้ชื่อเมธอดเดียวกัน

ด้วยVS2015 Update 1ตอนนี้มีทางลัดใหม่ที่เรียกว่า "Go To Implementation"


4
คุณสามารถใช้ Alt + End ได้หากคุณกำลังใช้ตัวส่งข้อมูลใหม่
brechtvhb

1
ไม่ได้ผลสำหรับฉัน ฉันใช้ VS Express 2013 สำหรับเว็บ
อากิระยามาโมโตะ

ฉันคิดว่านี่เป็น soln ที่ง่ายที่สุดโดยไม่ต้องละทิ้งแฮนด์ออฟจากคีย์บอร์ด ขอบคุณ Rolf
Jp Vinjamoori

1
นี่คือทางออกที่รวดเร็วที่สุดที่เป็นไปได้
mbudnik

@brechtvhb นอกจากนี้คุณยังสามารถตั้งค่านี้จะเป็น Alt + End โดยไม่ต้อง R # โดยการปรับแต่งแป้นพิมพ์ลัดสำหรับคำสั่งEdit.NavigateTo:)
demoncodemonkey

17

ฉันสร้างส่วนขยายฟรีสำหรับ Visual Studio 2010 และ Visual Studio 2012 เรียกว่า Inheritance Margin เพื่อให้คุณลักษณะเฉพาะนี้รวมทั้งให้ข้อบ่งชี้ที่ชัดเจนเมื่อวิธีการใช้วิธีการอินเทอร์เฟซเนื่องจากการจับคู่ลายเซ็น ในเวอร์ชันปัจจุบันคุณสามารถคลิกขวาบนสัญลักษณ์ใดก็ได้เพื่อรับเมนูรายการที่จะนำทางไป

ระยะขอบรับมรดก - คลังภาพ Visual Studio

ภาพหน้าจอ
(ที่มา: microsoft.com )


3
การทดลองใช้ resharper หมดอายุในที่ทำงานลองใช้ส่วนขยายนี้แล้วมันจะเขย่าวงการ! ขอบคุณครับ
Giorgio Minardi

15

คลิกขวาที่ "ค้นหาการอ้างอิงทั้งหมด"

สิ่งนี้จะแสดงบรรทัดของรหัสสำหรับสถานที่ทั้งหมดที่ใช้วิธีการรวมถึงการประกาศอินเทอร์เฟซและการใช้งานของวิธีการอินเทอร์เฟซ จากนั้นคุณสามารถคลิกที่บรรทัดเพื่อข้ามไปยังตำแหน่งรหัส


สิ่งนี้ไม่ได้ทำให้เกิดการทับซ้อน
Robaticus

1
@Robaticus จริง ๆ แล้วมันทำ ไม่ใช่วิธีที่สะดวกที่สุด แต่การใช้งานจะถูกนำมาผสมกับการอ้างอิงอื่น ๆ ทั้งหมด
Rex M

นั่นเป็นสิ่งเดียวที่ฉันทำตอนนี้ แต่มันน่าเบื่อเหนือสิ่งอื่นใดเพราะฉันไม่มีตาดี :)
user310291

6
ทางเลือกอื่นในการค้นหาสัญลักษณ์คือลำดับชั้นการโทร มันมีวิธีการจัดกลุ่มในโครงสร้างโฟลเดอร์: Calls to '... ', Calls จาก '... ' และ Implements '... '
Phil Carson

4
ทางลัดที่สำคัญสำหรับ "ดูทุกอ้างอิง" Shift + F12คือ
IsmailS

8

ขึ้นอยู่กับเวอร์ชันของ Visual Studio ที่คุณมีฉันจะพูดแบบมีเงื่อนไขว่า "ใช่"

ขณะนี้ฉันทำงานบน Ultimate และไม่มีเวอร์ชันอื่นเพื่อตรวจสอบสิ่งนี้ ที่กล่าวไว้ใน Ultimate คุณสามารถใช้ Architecture Explorer เพื่อค้นหาการใช้งาน มันมีส่วนเกี่ยวข้องมากกว่าวิธีการคลิกขวา แต่นี่คือวิธีการทำงาน

  • ไปที่View->Architecture Explorer(หรือ CTRL-W, N)
  • คลิกที่ Class View และค้นหาเนมสเปซที่มีอินเตอร์เฟสของคุณในรายการที่เปิดขึ้น
  • ไปทางขวาของรายการ namespace Typesที่เป็นปุ่มแนวตั้งที่บอกว่า คลิกที่นี่
  • เลือก Interfaces
  • เลือกส่วนต่อประสานของคุณจากรายการ
  • ปุ่มแนวตั้งที่บอกว่าMembersจะปรากฏขึ้นทางด้านขวา คลิกปุ่มนั้น
  • เลือกImplemented by(ใต้Inbound Navigation) และจะแสดงรายการการใช้งานอินเทอร์เฟซของคุณ
  • การดับเบิลคลิกที่การนำไปปฏิบัติจะนำคุณไปสู่ชั้นเรียน

ฉันค่อนข้างแน่ใจว่า Architecture Explorer เป็นรุ่นที่ดีที่สุดเท่านั้น แต่จะใช้งานได้
Richard

ขอบคุณค่อนข้างดีฉันยกนิ้วให้ แต่ในบริบทนี้ฉันต้องการที่จะเปลี่ยนรหัสอย่างรวดเร็ว
user310291

6

ภายใน 2012 Ultimate คุณสามารถค้นหาส่วนต่อประสานใน Explorer ได้ คลิกขวาที่อินเทอร์เฟซและเลือก "Derived Types" คลาสที่นำมาใช้จะแสดงในตัวสำรวจโซลูชัน ไม่แน่ใจว่าใช้งานได้ดีหรือไม่


ไม่ได้สังเกตว่า ขอบคุณ <br/> ตอนนี้หากมีวิธีเดียวที่จะให้ตัวสำรวจโซลูชันเปิดเป็นต้นไม้ไปยังไฟล์ที่แสดงอยู่ในปัจจุบันดังนั้นฉันไม่ได้นำเครื่องมือคำแนะนำของเครื่องมือแก้ไขมาเพื่อให้ได้เส้นทางของไฟล์เพื่อให้ได้มาจากนั้นนำทาง ผ่านทาง explorer ของการแก้ปัญหาไปยังไฟล์ต้นฉบับที่ฉันสามารถกำหนดรายการของการดำเนินการโดยสำหรับอินเตอร์เฟซ ... การนำรหัสที่มาควรจะกลายเป็นคุณสมบัติที่สำคัญกว่าที่ฉันคิด
George

- เพิ่งค้นพบคำสั่ง "Ctrl +], S" ซึ่งขยายแผนผังโซลูชัน Explorer ไปยังเอกสารแก้ไขปัจจุบัน (ซิงค์กับเอกสารที่ใช้งานอยู่) โหนดไฟล์ผลลัพธ์อาจถูกขยายเพื่อแสดงประเภทที่มีอยู่ซึ่งจะถูกคลิกขวาเพื่อเข้าถึงเมนูบริบทที่มีคำสั่ง 'Derived Types' ดี
George

2
@ George คุณสามารถมี Visual Studio ALWAYS เพื่อติดตามไฟล์ที่เปิดอยู่ในตัวสำรวจโซลูชันผ่านเครื่องมือ -> ตัวเลือก -> โครงการและโซลูชัน -> ทั่วไป -> "ติดตามรายการที่ใช้งานในตัวสำรวจโซลูชัน"
MajorRefactoring

VS2012 Premium มีคุณสมบัตินี้ด้วย ในVS2015 Enterprise คุณลักษณะ ' ประเภทที่ได้รับ ' ได้ถูกแบ่งออกเป็นสองประเภทคือ ' ประเภทที่ได้รับ ' & ' นำมาใช้โดย ' แม้จะดีกว่า:)
cateyes

6

Visual Studio 2015 อัปเดต 1 (วางจำหน่ายเดือนธันวาคม 2558) ได้เพิ่มคุณลักษณะ 'ไปสู่การใช้งาน' คลิกขวาเป็นมาตรฐาน


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 ในขณะที่ฉันเห็นด้วยกับคุณไม่ได้ซื้อผลิตภัณฑ์ที่มีคุณสมบัติตรงตามที่คุณต้องการเพื่อ "ลงโทษ" บุคคลที่สามที่ไม่ได้ให้มันออกจากกล่อง แต่กำลังตัดจมูกของคุณเพื่อทำให้ใบหน้าของคุณ
TarkaDaal

1
Resharper ให้สิ่งนี้โดยไม่ต้องแสดงวิธีใช้ทั้งหมด คุณสามารถเลือกการใช้งานที่คุณต้องการไป
Michael Joyce

4

Visual Studio พร้อมอัปเดต 1 ใช้คุณสมบัตินี้แล้ว! เพียงคลิกขวาที่สมาชิกและคุณจะเห็น "ไปใช้งาน" ภายใต้ "ไปที่คำจำกัดความ"


2

ตรวจสอบใหม่นี้ฟรี Visual Studio 2013 ต่อเนื่อง - Implementator เพิ่มตัวเลือก "ไปที่การใช้งาน" ไปที่เมนูบริบทของตัวแก้ไข Visual Studio

มันไม่น่าเชื่อถือและเร็วเหมือน Resharper แต่มันก็ใช้ได้ดี


2

คุณสามารถลองCtrl + F12ทางลัด มันจะนำคุณไปสู่การใช้งานเช่นเดียวกับที่จะนำคุณไปสู่วิธีการที่ไม่ใช่อินเตอร์เฟสโดยใช้ F12 [ฉันลองใน VS 2017 ไม่แน่ใจเกี่ยวกับเวอร์ชันอื่น]


1
ทางลัดนี้ทำงานได้ดีที่ vscode ด้วย typescript
Zuhair Taha

1

Visual Studio สามารถบอกคุณได้ว่ามันถูกอ้างอิงที่ไหนเพียงใด แต่นี่อาจจะหยาบเกินไป

มีเครื่องมืออื่น ๆ ที่สามารถบอกคุณเพิ่มเติมเกี่ยวกับโครงสร้างของแอปพลิเคชันของคุณรวมถึงคลาสใดที่ใช้อินเทอร์เฟซซึ่งวิธีการใดจะแทนที่วิธีอื่น ๆ และอื่น ๆ โดยส่วนตัวฉันชอบใช้ความเข้าใจสำหรับ C / C ++


1

ไปที่การประกาศจะเปิดวิธีการเชื่อมต่อ ไปที่การใช้งานจะนำคุณหรือรายการสำหรับคุณคลาสที่ใช้รหัสสำหรับวิธีการอินเทอร์เฟซนั้น (ไม่ใช่วิธีอินเทอร์เฟซของตัวเอง)

ปรับปรุง

ในฐานะที่เป็น Jon Skeet ชี้ให้เห็นในความคิดเห็น (และฉันพลาดก่อนที่จะตอบ) คุณสมบัติที่ฉันอธิบายอาจเป็นคุณลักษณะ ReSharper ... ไม่ใช่ Visual Studio


0

ไม่ได้สิ่งนี้เป็นไปไม่ได้แม้จะมีโครงสร้างรหัสหน่วยความจำที่ปรับปรุงโดย VS แต่การนำทางโค้ดนั้นค่อนข้าง ... ค่อนข้างตระหนี่

ดูเหมือนว่าทางเลือกเดียวคือการค้นหาทั่วโลกด้วย "ค้นหาอ้างอิงทั้งหมด" ตามด้วยการค้นหารายการผลลัพธ์ด้วยตนเองเพื่อไม่รวมการประกาศค่าที่พิมพ์การแปลง ฯลฯ หรือการใช้เครื่องมืออื่น ๆ ภายใน VS นอกเหนือจากเครื่องมือแก้ไขรหัส ค่อนข้างซับซ้อนและน่าผิดหวัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.