C#几个有用的反射方法

在C#编程时,有时需要使用.Net类库或者第三方类库中的私有方法,私有方法不能直接调用,需要使用反射进行调用,最常使用的是Type中的两个方法,一个是获取私有的方法,另一个是获取私有的属性值。获取私有方法的代码如下:

            MethodInfo mInfo = type
                .GetMethod(methodName,
                BindingFlags.NonPublic
                | BindingFlags.Static
                | BindingFlags.Instance);

这里 type为类型Type,methodName为私有方法的名称。封装为函数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  private static MethodInfo getNonPublicMethodInfo(Type type, string methodName)
{
MethodInfo mInfo = type
.GetMethod(methodName,
BindingFlags.NonPublic
| BindingFlags.Static
| BindingFlags.Instance);
return mInfo;
}

private static MethodInfo getNonPublicMethodInfo<T>(string methodName)
where T : class
{
return getNonPublicMethodInfo(typeof(T), methodName);
}

获取私有属性的方法如下:

1
2
3
4
5
6
7
8
9
10
11
private static object getPrivateProperty<T>(object instance, string propertyName)
where T : class
{
object result = null;
PropertyInfo pInfo = typeof(T).GetProperty(propertyName, BindingFlags.NonPublic | BindingFlags.Instance);
if (pInfo != null)
{
result = pInfo.GetValue(instance, null);
}
return result;
}