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

如何在C#中利用反射检索私有嵌套类型?

如何用反射枚举C#类的所有嵌套类型(不受可见性限制)

默认调用GetType().GetNestedTypes()只会返回公开的嵌套类型,如果要获取所有可见性的嵌套类型(包括私有、保护、内部等),需要使用带BindingFlags参数的重载方法,传入对应的标记组合。

具体解决方案

调用GetNestedTypes时传入BindingFlags.Public | BindingFlags.NonPublic,这个组合会同时包含公开和非公开的嵌套类型:

public sealed class Foo
{
    public Foo()
    {
        // 获取所有可见性的嵌套类型
        foreach(var type in GetType().GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic))
        {
            Console.WriteLine($"找到嵌套类型:{type.Name}");
            // 这里会输出 NestedPublic 和 NestedPrivate
        }
    }  

    public class NestedPublic
    { }

    private class NestedPrivate
    { }
}

绑定标记说明

  • BindingFlags.Public:指定要包含公开的嵌套类型
  • BindingFlags.NonPublic:指定要包含非公开的嵌套类型(涵盖private、protected、internal等访问修饰符的类型)

如果需要进一步筛选(比如只获取实例嵌套类型或静态嵌套类型),可以额外添加BindingFlags.Instance或BindingFlags.Static标记,例如:

// 获取所有非公开的实例嵌套类型
GetType().GetNestedTypes(BindingFlags.NonPublic | BindingFlags.Instance);

内容的提问来源于stack exchange,提问作者Antoine C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:00:57