2013-01-09 40 views
5

Tôi có lớp C# có quá nhiều mã và tôi muốn refactor nó. Những gì tôi muốn làm là bắt đầu với tất cả các public methods, và xây dựng một tree cho mỗi một, cho thấy các phương pháp khác trong lớp được gọi là từ nó, và sau đó được gọi là từ một đứa trẻ, và như vậy.Làm cách nào để tìm phương pháp nào được gọi từ phương thức lớp C# - KHÔNG ở thời gian chạy

Điều này sẽ cho phép tôi xem private methods chỉ thuộc về một public method, được chia sẻ v.v.

Lưu ý rằng tôi KHÔNG muốn làm điều này trong thời gian chạy, tôi muốn có thể xem một lớp học, hoặc trực tiếp tại .cs file, hoặc sử dụng phản ánh trên biên dịch DLL.

Tôi biết tôi có thể sử dụng sự phản chiếu trên DLL đã biên dịch để lấy các phương thức, nhưng tôi không thể tìm ra phương pháp nào được gọi bằng các phương thức khác trong lớp.

Bất kỳ ai có ý tưởng nào? Một lần nữa, đây không phải là một vấn đề thời gian chạy, nó hoàn toàn là xây dựng một tiện ích tái sử dụng để giúp tái cấu trúc một lớp quá khổ. Có một vài giải pháp tôi đang làm việc, vì vậy mã woudl được sử dụng hơn và hơn nữa.

+0

Trình chia sẻ lại có điều này. Nó sẽ cho bạn thấy tất cả các tập quán của một phương pháp. – Oded

+3

Nhấp chuột phải vào phương thức -> "Xem phân cấp cuộc gọi"? –

+2

Nếu bạn muốn cuộn của riêng bạn: http://stackoverflow.com/a/5741770/16959 đây là một câu trả lời được nghiên cứu rất tốt về chủ đề này –

Trả lời

10

Visual Studio 2010 có hành động "Xem phân cấp cuộc gọi", nơi bạn có thể xem tất cả các địa điểm trong giải pháp nơi mã của bạn được gọi.

Từ kinh nghiệm của tôi phân tích tĩnh này có thể hơi thiếu, cho phương pháp ví dụ có thể được gọi là động sử dụng Reflection, thông qua dữ liệu Ràng buộc, qua Dependency Injection container vv

Ngoài ra, đó có thể là chủ đề chút đi, và không áp dụng trong trường hợp của bạn, nhưng tôi tìm thấy một cách tốt để tìm mã chết cho thành phần là có một bộ kiểm thử tích hợp. Sau đó, bạn có thể chạy phạm vi mã và xem trực quan những đường dẫn mã nào không bao giờ được thực thi.

+2

+1 cho nhận xét về phản chiếu, DI, v.v. –

+0

Sebastian - cảm ơn bạn đã trả lời, nhưng nếu bạn đọc trả lời của tôi cho Oded và unicron ở trên, bạn sẽ thấy tại sao tính năng này không đủ mạnh cho những gì tôi cần. Thử nghiệm là một cách tiếp cận thú vị, nhưng nó sẽ là quá nhiều việc phải làm bây giờ trên một lớp học hiện có (và rất lớn), và quá khó để phân tích để xem cái được gọi là gì. –

+1

Xem Phân cấp cuộc gọi thực sự cho bạn thấy loại cây đôi - hoặc cây và rễ :) Vì vậy, bạn có thể thấy tất cả các phương thức gọi phương thức đã cho cũng như tất cả các phương thức được gọi bằng phương thức đã cho. –

Các vấn đề liên quan