Bootstrap

C# 反射获取私有静态方法详解

C# 反射获取私有静态方法详解

基本步骤

// 1. 获取类型
Type targetType = typeof(GraphicsFormatUtility);

// 2. 获取私有静态方法,需要指定BindingFlags
MethodInfo methodInfo = targetType.GetMethod(
    "GetFormat",                                    // 方法名
    BindingFlags.Static |                          // 静态方法
    BindingFlags.NonPublic                         // 私有方法
);

// 3. 调用方法
// null: 因为是静态方法,不需要实例
// new object[] { param1, param2 }: 方法参数数组
object result = methodInfo.Invoke(null, new object[] { param1 });

// 4. 转换结果到正确的类型
GraphicsFormat format = (GraphicsFormat)result;

BindingFlags 主要选项

标志说明
BindingFlags.Public公开成员
BindingFlags.NonPublic私有成员
BindingFlags.Static静态成员
BindingFlags.Instance实例成员
BindingFlags.DeclaredOnly仅当前类声明的成员(不包含继承)

常见组合

获取私有静态方法

BindingFlags.NonPublic | BindingFlags.Static

获取私有实例方法

BindingFlags.NonPublic | BindingFlags.Instance

获取所有静态方法(公开+私有)

BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static

获取当前类的所有成员

BindingFlags.Public | 
BindingFlags.NonPublic | 
BindingFlags.Static | 
BindingFlags.Instance | 
BindingFlags.DeclaredOnly
;