C#的“受保护的内部”意味着“受保护”*或*“内部”。是否有任何关键字意味着“受保护”* AND *“内部”?

时间:2011-04-08 14:11:38

标签: c# access-modifiers

我需要声明一个受保护 AND 内部的成员。然而,就我完全的困惑而言,我刚刚发现“受保护的内部”实际上意味着受保护的OR内部的困难方式。是否有任何访问修饰符意味着受保护的 AND 内部?

5 个答案:

答案 0 :(得分:6)

受保护的AND内部在C#(或任何其他高级.NET语言afaik)中不可用。虽然CLR支持它,但可以在IL中实现。

答案 1 :(得分:6)

虽然在{C#中CLR supports it,但是无法强制成员受到内部保护。

C#和VB.NET都使用联合而不是交集来组合访问修饰符。

如果你必须拥有它,有一个解决方法。它不干净,但它的工作原理。您可以在其上创建一个带有内部属性的辅助类,然后将该内部类类型的受保护属性添加到您的类中。受保护属性的内部属性只能在拥有程序集中的子类上访问。

示例如下。我已经使用了一个泛型,你可能想要多个不同类型的受保护内部属性。无论期望的属性类型如何,泛型都允许您使用一个内部类。

public class AccessHelper<T>
{
    internal T Value { get; set; }
}

public class AClass
{
    public AClass()
    {
        InternalProperty.Value = "Can't get or set this unless you're a derived class inside this assembly.";
    }

    protected AccessHelper<String> InternalProperty
    {
        get;
        set;
    }
}

答案 2 :(得分:3)

引用Equiso的链接:

  

顺便说一句,CLR确实有ProtectedANDInternal的概念,但C#没有语法来指定它。如果你看看CLR的System.Reflection.MethodAttributes枚举,你会看到FamANDAssem和FamORAssem(“Family”是CLR的C#受保护术语,“Assem”是C#的内部术语)。

答案 3 :(得分:1)

您无法在C#中定义受保护的AND内部成员,尽管CLR(MemberAttributes.FamilyAndAssembly)支持

答案 4 :(得分:0)

内部类和受保护成员如何。