È ansible mostrare tutti i metodi e i loro modificatori di accesso?

Sto facendo una revisione del codice su alcune grandi librerie di classi e mi stavo chiedendo se qualcuno sa di un modo facile e facile per generare un elenco di tutti i metodi (e possibilmente anche delle proprietà / variabili) e dei loro modificatori di accesso. Ad esempio, vorrei qualcosa del genere:

private MyClass.Method1() internal MyClass.Method2() public MyOtherClass.Method1() 

Qualcosa di simile ad un file di intestazione C ++, ma per C #. Questo metterebbe tutto in un unico posto per una rapida revisione, quindi potremo verificare se alcuni metodi debbano davvero essere contrassegnati come interni / pubblici.

Sì, usa la riflessione:

 foreach (Type type in assembly.GetTypes()) { foreach (MethodInfo method in type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance)) { Console.WriteLine("{0} {1}{2}.{3}", GetFriendlyAccess(method), method.IsStatic ? "static " : "", type.Name, method.Name); } } 

Lascerò GetFriendlyAccessName come esercizio per il lettore: usa IsFamily, IsPrivate, IsPublic, IsProtected ecc. O la proprietà Attributes.

Bene, puoi certamente usare la riflessione per questo, per enumerare i metodi.

I ctag esuberanti hanno una modalità per C # ed è facile da usare. Detto questo, vorrei solo riflettere l’assemblea.

Ci sono strumenti che puoi usare, come Reflector

.Net Reflector o ildasm.

ildasm genererà un file carino per te se lo chiedi di esportare, ma chiedi solo i membri specifici di cui hai bisogno.

NDepends lo farà anche (e con maggiore flessibilità) ma, per l’uso commerciale, costa denaro.

Se stai usando Visual Studio, puoi sempre ottenere quella vista.

Basta usare l’opzione “Vai alla definizione” e Visual Studio apre i metadati di tipo in una nuova scheda (se si sta utilizzando la DLL e non direttamente il codice sorgente).