Voglio generare un elenco di tutti i metodi in una classe o in una directory di classi. Ho anche bisogno dei loro tipi di ritorno. L'output in un file di testo lo farà ... Qualcuno sa di uno strumento, di un aggancio per VS o qualcosa che farà il compito? Im utilizzando i codici C# per la via e Visual Studio 2008 IDE comeGenera un elenco di metodi di una classe con tipi di metodo
risposta
Certo - uso Type.GetMethods(). Ti consigliamo di specificare diverse bandiere vincolanti per ottenere metodi non pubblici, ecc Si tratta di una bella greggio, ma punto di partenza praticabile:
using System;
using System.Linq;
class Test
{
static void Main()
{
ShowMethods(typeof(DateTime));
}
static void ShowMethods(Type type)
{
foreach (var method in type.GetMethods())
{
var parameters = method.GetParameters();
var parameterDescriptions = string.Join
(", ", method.GetParameters()
.Select(x => x.ParameterType + " " + x.Name)
.ToArray());
Console.WriteLine("{0} {1} ({2})",
method.ReturnType,
method.Name,
parameterDescriptions);
}
}
}
uscita:
System.DateTime Add (System.TimeSpan value)
System.DateTime AddDays (System.Double value)
System.DateTime AddHours (System.Double value)
System.DateTime AddMilliseconds (System.Double value)
System.DateTime AddMinutes (System.Double value)
System.DateTime AddMonths (System.Int32 months)
System.DateTime AddSeconds (System.Double value)
System.DateTime AddTicks (System.Int64 value)
System.DateTime AddYears (System.Int32 value)
System.Int32 Compare (System.DateTime t1, System.DateTime t2)
System.Int32 CompareTo (System.Object value)
System.Int32 CompareTo (System.DateTime value)
System.Int32 DaysInMonth (System.Int32 year, System.Int32 month)
(ecc)
Fuori interesse, restituisce tutti i metodi del tipo corrente o include anche tutti i metodi pubblici delle sue classi padre? –
@ LoïcFaure-Lacroix: C'è un modo molto semplice per provarlo :) (non riesco a ricordare due piedi me stesso, ma è facile testare ...) –
ok, ho fatto un paio di test. Sono abbastanza sicuro che mostri tutti i metodi pubblici. Tuttavia, sembra esserci un attributo "DeclaringType" che sembra essere il Type che ha dichiarato il metodo. Quindi, se qualcuno vuole filtrare su un particolare oggetto nella gerarchia, dovrebbe essere possibile. –
È possibile ottenere in queste liste molto facilmente con la riflessione. per esempio. con Type.GetMethods()
using (StreamWriter sw = new StreamWriter("C:/methods.txt"))
{
foreach (MethodInfo item in typeof(MyType).GetMethods())
{
sw.WriteLine(item.Name);
}
}
Avete sorgente (.cs) o assembly compilati? C'è una differenza enorme ... –
Elenco delle classi suggeriscono che il suo codice ... che complica le cose un po ' –
no, complica le cose molto ;-p –