属性上的访问修饰符; 以下为什么不工作?

Bra*_*ith 6 c# properties access-modifiers

我遇到了一个对我来说没有意义的编译器错误.我有一个internal属性,我想限制它的set块,使它只能通过继承.我认为这会奏效:

internal bool MyProperty {
    get { return someValue; }
    protected internal set { someValue = value; }
}
Run Code Online (Sandbox Code Playgroud)

但编译器说set块上的访问修饰符需要比internal- 我错过了什么,或者protected internal 不是更严格的限制internal

Mar*_*ell 9

protected internal较少限制性的; 它受保护内部(不是) - 因此另外允许来自其他程序集的子类访问它.您需要反转:

protected internal bool MyProperty {
    get { return someValue; }
    internal set { someValue = value; }
}
Run Code Online (Sandbox Code Playgroud)

这将允许程序集中的代码以及其他程序集中的子类获取(读取) - 但只有程序集中的代码才能设置它(写入).