You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用反射获取对象所有属性(含私有)遇阻求助

解决C#获取类所有属性(含私有)的问题

我完全懂那种翻遍文档、试遍各种BindingFlags组合却还是拿不到私有属性的憋屈感!结合你用的VS2017 15.5.7和.NET Framework 4.7.2环境,大概率是BindingFlags的组合没凑全,或者没考虑到属性是实例还是静态的情况。

先给你一套完整的可运行示例

测试类示例

public class TestClass
{
    public string PublicProp { get; set; }
    private string PrivateProp { get; set; }
    protected string ProtectedProp { get; set; }
    internal string InternalProp { get; set; }
    // 顺便覆盖静态属性场景
    public static string StaticPublicProp { get; set; }
    private static string StaticPrivateProp { get; set; }
}

正确的属性获取代码

要拿到所有实例+静态、公共+非公共(私有/保护/内部)的属性,必须把对应的BindingFlags组合起来,缺一不可:

using System;
using System.Reflection;

class Program
{
    static void Main(string[] args)
    {
        Type targetType = typeof(TestClass);
        
        // 核心组合:覆盖实例/静态,公共/所有非公共类型
        BindingFlags fullFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
        
        // 获取所有符合条件的属性
        PropertyInfo[] allProperties = targetType.GetProperties(fullFlags);
        
        foreach (var prop in allProperties)
        {
            Console.WriteLine($"属性名: {prop.Name}, 访问级别: {GetAccessLevel(prop)}");
        }
    }
    
    // 辅助方法:直观显示属性的访问修饰符
    private static string GetAccessLevel(PropertyInfo prop)
    {
        var getter = prop.GetMethod;
        if (getter.IsPublic) return "Public";
        if (getter.IsPrivate) return "Private";
        if (getter.IsProtected) return "Protected";
        if (getter.IsAssembly) return "Internal";
        return "Unknown";
    }
}

你可能踩过的几个坑

  • 只加了BindingFlags.NonPublic但没指定BindingFlags.Instance/BindingFlags.Static:默认GetProperties()只会取公共实例属性,单独加非公共标识会导致无结果返回。
  • 混淆了GetProperties和GetFields:你要的是属性(Property),不是字段(Field),别误调用成GetFields()了!
  • 遗漏了BindingFlags.DeclaredOnly(可选):如果只想获取当前类自己声明的属性(不包含继承来的),需要在组合里加上这个标识。

如果替换成你的类后还是有问题,可以把你的类代码贴出来,我再帮你排查细节!

内容的提问来源于stack exchange,提问作者user2937874

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:09:24