访问修饰符- c# 's & protected internal"意味着“protected&quo

本文关键字:protected internal quot quo 意味着 访问 | 更新日期: 2023-09-27 17:49:21

我需要声明一个成员,它既是受保护的又是内部的。然而,让我完全困惑的是,我刚刚发现"内部保护"实际上是指内部保护或保护。是否有访问修饰符表示受保护的是内部的?

访问修饰符- c# 's & protected internal"意味着“protected&quo

虽然CLR支持,但在c#中没有办法强制成员为protected AND internal。

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

如果你一定要这样做,有一个变通的办法。虽然不干净,但很有效。您可以创建带有内部属性的helper类,然后将该内部类类型的受保护属性添加到您的类中。受保护属性的内部属性只能在所属程序集中的子类上访问。

的例子。我使用泛型是因为您可能需要多个不同类型的受保护内部属性。泛型将允许您使用一个内部类,而不管所需的属性类型。

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;
    }
}

protected AND internal在c#(或任何其他高级。net语言)中不可用。虽然它被CLR支持并且可以在IL中实现。

引用自Equiso的链接:

顺便说一句,CLR确实有ProtectedANDInternal的概念,但是c#没有语法来指定它。如果你看一下CLR的system . reflection . methodatattributes枚举,你会看到FamANDAssem和FamORAssem("Family"是CLR对c#的protected的术语,"Assem"是c#的internal的术语)。

在c#中不能定义protected和internal成员,尽管CLR (MemberAttributes.FamilyAndAssembly)支持

内部类和受保护成员呢?