C# IsAssembly/IsFamily与IsFamilyAssembly之间的关系

C# IsAssembly/IsFamily与IsFamilyAssembly之间的关系,c#,.net,.net-assembly,assemblies,system.reflection,C#,.net,.net Assembly,Assemblies,System.reflection,IsAssembly、IsPublic、IsFamily、IsFamilyOrAssembly、IsFamily和daassembly我已经读过这方面的内容,但我无法理解每一个都做了什么。奇怪的是,IsFamily和IsAssembly在代码中返回False,但IsFamilyOrAssembly返回True 有人能解释一下这些属性吗?因为我觉得从文档中很难理解。我在开始阅读c#中的反射时遇到了这些问题 此代码示例生成类似以下内容的输出: 类的成员具有与其关联的访问修饰符(公共、内部等)。这些定

IsAssembly、IsPublic、IsFamily、IsFamilyOrAssembly、IsFamily和daassembly
我已经读过这方面的内容,但我无法理解每一个都做了什么。奇怪的是,
IsFamily
IsAssembly
在代码中返回
False
,但
IsFamilyOrAssembly
返回
True

有人能解释一下这些属性吗?因为我觉得从文档中很难理解。我在开始阅读c#中的反射时遇到了这些问题

此代码示例生成类似以下内容的输出:


类的成员具有与其关联的访问修饰符(公共、内部等)。这些定义了由成员实现的面向对象封装的级别。您可以在上找到更多详细信息

使用反射,您可能需要查看:

                    /*Modifiers*/

IsPublic            public

IsFamilyOrAssembly  protected internal

IsFamily            protected

IsFamilyAndAssembly private protected (since C# 7.2)

IsAssembly          internal

当您想确定某个成员在继承类型中是否可见时,需要使用表达式(m.IsFamilyOrAssembly|124;m.IsFamily|124;m.isfamilyDassembly|m.IsAssembly)进行检查。这些属性中只有一个是true,其他所有属性都是false

这些方法检查枚举中的某些枚举值。不幸的是,这是一个相当复杂的枚举类型。如果我们检查它:


我们可以观察到,
FamORAssem
FamANDAssem
是不同的值,它们与
系列
组件
值无关。令人困惑的是,这个枚举用
标志
属性标记,但是当涉及到成员访问值时,它们不是简单的按位组合。

你能把这个问题颠倒过来吗?你到底在寻找什么样的信息,为什么你认为这些属性会提供这些信息?@CodeCaster我不知道如何修改它。我需要知道它的功能,在哪里可以应用,它们之间有什么区别。你现在发现这些属性是互斥的,对应于访问修饰符的某些组合。你还需要知道什么?另外,为什么您要从MSDN复制代码,但不运行它?输出与代码不匹配。
                              IsAssembly        IsFamilyOrAssembly
                     IsPublic          IsFamily          IsFamilyAndAssembly

m_public             True     False    False    False    False
m_internal           False    True     False    False    False
m_protected          False    False    True     False    False
m_protected_public   False    False    False    True     False
                    /*Modifiers*/

IsPublic            public

IsFamilyOrAssembly  protected internal

IsFamily            protected

IsFamilyAndAssembly private protected (since C# 7.2)

IsAssembly          internal
public enum MethodAttributes
{
    // NOTE: This Enum matchs the CorMethodAttr defined in CorHdr.h

    // member access mask - Use this mask to retrieve accessibility information.
    MemberAccessMask    =   0x0007,
    PrivateScope        =   0x0000,     // Member not referenceable.
    Private             =   0x0001,     // Accessible only by the parent type.  
    FamANDAssem         =   0x0002,     // Accessible by sub-types only in this Assembly.
    Assembly            =   0x0003,     // Accessibly by anyone in the Assembly.
    Family              =   0x0004,     // Accessible only by type and sub-types.    
    FamORAssem          =   0x0005,     // Accessibly by sub-types anywhere, plus anyone in assembly.
    Public              =   0x0006,     // Accessibly by anyone who has visibility to this scope.    
    // end member access mask
    ...