2013-01-09 7 views
5

Ich habe eine C# -Klasse, die viel zu viel Code hat, und ich möchte refactor es. Was ich tun möchte, ist mit allen public methods beginnen, und bauen Sie eine tree für jeden einzelnen, zeigt, welche anderen Methoden in der Klasse von ihm aufgerufen werden, und dann die von der untergeordneten aufgerufen werden, und so weiter.Wie finde ich, welche Methoden aus einer C# -Klassenmethode aufgerufen werden - NICHT zur Laufzeit

Dies wird mir ermöglichen zu sehen, welche gehören nur zu einem public method, die freigegeben sind und so weiter.

Beachten Sie, dass ich dies nicht zur Laufzeit tun möchte, ich möchte in der Lage sein, eine Klasse zu betrachten, entweder direkt an der .cs file, oder mit Reflektion auf der kompilierten DLL.

Ich weiß, ich kann Reflexion über die kompilierte DLL verwenden, um die Methoden zu erhalten, aber ich kann keine Möglichkeit finden, herauszufinden, welche Methoden von anderen Methoden in der Klasse aufgerufen werden.

Wer irgendwelche Ideen? Auch hier handelt es sich NICHT um ein Laufzeitproblem. Es handelt sich lediglich um ein wiederverwendbares Dienstprogramm, mit dem eine übergroße Klasse umgestaltet werden kann. Es gibt einige in der Lösung, an denen ich arbeite, also sollte der Code immer wieder verwendet werden.

+0

Resharper hat dies. Es zeigt Ihnen alle Verwendungen einer Methode. – Oded

+3

Klicken Sie mit der rechten Maustaste auf die Methode -> "Aufrufhierarchie anzeigen"? –

+2

Wenn Sie Ihre eigenen rollen möchten: http://Stackoverflow.com/a/5741770/16959 Dies ist eine sehr gut recherchierte Antwort zu diesem Thema –

Antwort

10

Visual Studio 2010 verfügt über die Aktion "Aufrufhierarchie anzeigen", in der Sie alle Stellen in Ihrer Projektmappe anzeigen können, in denen Ihr Code aufgerufen wird.

Aus meiner Erfahrung diese statische Analyse etwas sein kann, fehlt zum Beispiel Verfahren dynamisch Reflexion unter Verwendung genannt werden könnte, durch Datenbindung, durch Dependency Injection Container usw.

Auch die etwas abseits Thema sein können, und nicht anwendbar in Ihrem Fall, aber ich finde eine gute Möglichkeit, toten Code für Komponente zu finden, ist eine Suite von Integrationstests zu haben. Dann können Sie Code Coverage ausführen und visuell sehen, welche Code-Pfade nie ausgeführt werden.

+2

+1 für den Kommentar zu Reflexion, DI usw. –

+0

Sebastian - Danke für die Antwort, aber wenn Sie meine Antwort auf Oded und Unicron oben lesen, werden Sie sehen, warum diese Funktion nicht stark genug ist für das, was ich brauche. Testen ist ein interessanter Ansatz, aber es wäre zu viel Arbeit, um jetzt an einer existierenden (und sehr großen) Klasse zu arbeiten, und zu schwer zu analysieren, um zu sehen, was was heißt. –

+1

View Call Hierarchy zeigt Ihnen tatsächlich eine Art Doppelbaum - oder Tree und Roots :) Damit können Sie alle Methoden sehen, die die angegebene Methode aufrufen, sowie alle Methoden, die von der angegebenen Methode aufgerufen werden. –

Verwandte Themen