浅谈.Net反射 8

2019-07-30 10:38:30 浏览数 (2)

方法信息与MethodInfo类型

System.Reflection.MethodInfo类封装了类型的方法信息,它继承自MemberInfo。

定义MethodExplore()方法:

代码语言:javascript复制
public static void MethodExplore(Type t)
{
  StringBuilder sb = new StringBuilder();
  sb.AppendLine("Explore type "   t.Name   " methods:");
  sb.AppendLine(String.Empty.PadLeft(50, '-'));
  MethodInfo[] methods = t.GetMethods();
  foreach (MethodInfo method in methods)
  {
    sb.AppendLine("name:"   method.Name);
    sb.AppendLine("method:"   method.ToString());
    sb.AppendLine("attributes:"   method.Attributes);
    sb.AppendLine("return type:"   method.ReturnType);
    ParameterInfo[] parameterInfos = method.GetParameters();
    foreach (var param in parameterInfos)
    {
      sb.AppendLine("--parameter name: "   param.Name);
      sb.AppendLine("--parameter type: "   param.ParameterType);
      sb.AppendLine("--parameter Position: "   param.Position);
      sb.AppendLine("--parameter IsOptional: "   param.IsOptional);
      sb.AppendLine("--parameter HasDefaultValue: "   param.HasDefaultValue);
    }
  }
  Console.WriteLine(sb.ToString());
}

MethodInfo类也有一个Attributes属性,它返回一个MethodAttributes位标记,MethodAttributes标明了方法的一些特性,常见的有Abstract、Static、Virtual、Public、Private等。

与前面不同的是,MethodInfo可以具有参数和返回值,MethodInfo类提供了GetParameters()方法获取参数对象的数组,方法的参数都封装在了ParameterInfo类型中。

运行下面的代码:

代码语言:javascript复制
Type t = typeof(DemoClass);
MethodExplore(t);

运行结果:

ConstructorInfo类型和EventInfo类型

这两个类型封装了类型的构造函数和事件信息,查看这些类型与之前的方法类似,通过调用Type对象中的下面两方法就可以返回:

代码语言:javascript复制
public ConstructorInfo[] GetConstructors();
public virtual EventInfo[] GetEvents();

本文回顾:

方法信息与MethodInfo类型

ConstructorInfo类型和EventInfo类型

0 人点赞