受保护的内部成员(C# 参考)

protected internal 关键字组合是一种成员访问修饰符。 可从当前程序集或派生自包含类的类型访问受保护的内部成员。 有关 protected internal 和其他访问修饰符的比较,请参阅可访问性级别

示例

可从包含程序集内的任何类型访问基类的受保护的内部成员。 也可在另一程序集中的派生类中访问它,前提是通过派生类类型的变量进行访问。 以下面的代码段为例:

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
   protected internal int myValue = 0;
}

class TestAccess
{
    void Access()
    {
        var baseObject = new BaseClass();
        baseObject.myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
    static void Main()
    {
        var baseObject = new BaseClass();
        var derivedObject = new DerivedClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 10;

        // OK, because this class derives from BaseClass.
        derivedObject.myValue = 10;
    }
}

此示例包含两个文件,即 Assembly1.csAssembly2.cs。 第一个文件包含公共基类 BaseClass 和另一个类 TestAccessBaseClass 拥有受保护的内部成员 myValue,由 TestAccess 类型访问。 在第二个文件中,如果尝试通过 BaseClass 的实例访问 myValue ,会生成错误,但如果尝试通过一个派生类的实例来访问此成员,DerivedClass 会成功。

结构成员不能为 protected internal,因为无法继承结构。

C# 语言规范

有关详细信息,请参阅 C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。

请参阅