【问题标题】:Generate List of methods of a class with method types生成具有方法类型的类的方法列表
【发布时间】:2010-11-14 23:12:15
【问题描述】:

我想生成一个类或类目录中所有方法的列表。我还需要他们的返回类型。将其输出到文本文件就可以了...有没有人知道一个工具,VS的插件或可以完成任务的东西?顺便说一句,我使用 C# 代码和 Visual Studio 2008 作为 IDE

【问题讨论】:

  • 您是否有源代码 (.cs) 或已编译的程序集?有很大的不同...
  • This 应该可以解决问题。简而言之 - 您可以通过称为 reflection 的过程获取有关类及其方法的信息。
  • 类目录表明它的代码......这让事情变得有点复杂
  • 不,它使事情复杂化了很多;-p
  • 抱歉忘记指定.....我说的是.cs代码

标签: c# class methods


【解决方案1】:

当然 - 使用 Type.GetMethods()。您需要指定不同的绑定标志来获取非公共方法等。这是一个非常粗略但可行的起点:

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);
        }
    }
}

输出:

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)

(等)

【讨论】:

  • 出于兴趣,这是返回当前类型的所有方法,还是还包括其父类的所有公共方法?
  • @LoïcFaure-Lacroix:有一个非常简单的方法来测试它:)(我自己不记得了,但它很容易测试......)
  • 好的,我做了一些测试。我很确定它显示了所有公共方法。虽然,似乎有一个属性“DeclaringType”,它似乎是声明该方法的类型。因此,如果有人想过滤层次结构中的特定对象,那应该是可能的。
【解决方案2】:
using (StreamWriter sw = new StreamWriter("C:/methods.txt"))
{
      foreach (MethodInfo item in typeof(MyType).GetMethods())
      {
            sw.WriteLine(item.Name);
      } 
}

【讨论】:

    【解决方案3】:

    您可以通过反思非常轻松地获得这些列表。例如Type.GetMethods()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 2011-07-22
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多