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

pyo*_*yon 2 c# access-modifiers

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

Mat*_*vey 6

protected#internal在C#(或任何其他高级.NET语言afaik)中不可用.虽然它受CLR支持,但可以在IL中实现.


Chr*_*man 6

虽然CLR支持它,但在C#中没有办法强制成员受保护和内部.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)