2013-01-09 8 views
5

Mam klasę C#, która ma o wiele za dużo kodu i chcę ją ustawić na refactor. To, co chciałbym zrobić, to zacząć od wszystkich public methods i zbudować dla każdego z nich tree, pokazując, które inne metody w klasie są z niego wywoływane, a następnie, które są wywoływane z tego pierwszego i tak dalej.Jak znaleźć metody wywoływane z metody klasy C# - NIE w czasie wykonywania?

To pozwoli mi zobaczyć, które private methods należą wyłącznie do jednego public method, które są udostępniane i tak dalej.

Należy zauważyć, że NIE chcę tego robić w czasie wykonywania, chcę móc spojrzeć na klasę, bezpośrednio na .cs file, lub używając refleksji na skompilowanym DLL.

Wiem, że mogę użyć refleksji na skompilowanej bibliotece DLL, aby uzyskać metody, ale nie mogę znaleźć żadnego sposobu na sprawdzenie, które metody są wywoływane przez inne metody w klasie.

Czy ktoś ma jakieś pomysły? Ponownie, nie jest to kwestia czasu wykonywania, jest to wyłącznie do budowy narzędzia wielokrotnego użytku, aby pomóc w refaktoryzacji oversized klasy. W rozwiązaniu, nad którym pracuję, jest sporo, więc kod będzie używany w kółko.

+0

Resharper ma to. Testament pokazuje wszystkie zastosowania metody. – Oded

+3

Kliknij prawym przyciskiem myszy metodę -> "Wyświetl hierarchię połączeń"? –

+2

Jeśli chcesz przetasować własne: http://stackoverflow.com/a/5741770/16959 jest to bardzo dobrze zbadana odpowiedź na ten temat –

Odpowiedz

10

Program Visual Studio 2010 ma akcję "Wyświetl hierarchię połączeń", w której można zobaczyć wszystkie miejsca w rozwiązaniu, w których wywoływany jest kod.

Z mojego doświadczenia to analiza statyczna może być nieco brakuje, na przykład metodę można nazwać dynamicznie przy użyciu odbicie, poprzez powiązanie danych, dzięki Dependency Injection Container itp

również, że może być trochę off topic, i nie ma zastosowania w twoim przypadku, ale dobrym sposobem znalezienia martwego kodu dla komponentu jest posiadanie zestawu testów integracyjnych. Następnie możesz uruchomić zasięg kodu i zobaczyć, jakie ścieżki kodu nigdy nie są wykonywane.

+2

+1 za komentarz na temat odbicia, DI, itp. –

+0

Sebastian - dzięki za odpowiedź, ale jeśli przeczytasz moją odpowiedź na Odeda i unicrona powyżej, zobaczysz, dlaczego ta funkcja nie jest wystarczająco silna, na to, czego potrzebuję. Testowanie jest interesującym podejściem, ale byłoby zbyt wiele pracy teraz na istniejącej (i bardzo dużej) klasie, i zbyt trudne do analizy, aby zobaczyć, co co nazwał. –

+1

Zobacz Hierarchię połączeń faktycznie pokazuje rodzaj podwójnego drzewa - lub drzewa i korzenie :) Tak, aby można było zobaczyć wszystkie metody wywołujące daną metodę oraz wszystkie metody wywoływane przez podaną metodę. –

Powiązane problemy