【问题标题】:How to tell whether a class/method is accessible using reflection?如何判断一个类/方法是否可以使用反射访问?
【发布时间】:2011-03-04 14:38:48
【问题描述】:

我使用动态程序集在运行时创建派生类。如何通过反射判断基类和基类中的各个方法是否可以在动态程序集中的派生类中使用/调用?

【问题讨论】:

    标签: .net reflection visibility reflection.emit


    【解决方案1】:

    MethodInfoType 对象上有许多属性可用于查询可见性。

    例如,对于一个类型,您可以检查IsPublicIsPrivateIsNotPublicIsNestedIsNestedFamOrAssembly 等等。

    对于一个方法(MethodInfo 对象),您有一个类似的集合:IsPublicIsPrivateIsFamilyOrAssembly 等。

    因此,将其与类型上的 Assembly 属性等信息结合起来(这样您就可以判断 Type1 和 Type2 是否都在同一个程序集中),您应该能够获得所需的所有信息。

    【讨论】:

    • 如果 .NET 框架确实没有提供直接的方法来回答我的问题,那么在某个地方是否至少有一个规则列表?例如,很容易忘记仅仅因为嵌套类 IsPublic 并不意味着它是可访问的,如果父类是内部的则不是。
    • 是的,这就是问题所在,有规则,但您必须自己构建代码来检查它们。我什至不确定列出所有规则的特定资源(尽管我确定某个地方存在)。如果我自己这样做,我可能会构建一些处理最常见情况的东西,然后在遇到其他情况时添加它们。不过,这也取决于您的受众群体。
    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多