Search code examples
c#access-modifiersc#-6.0c#-7.2

What is the meaning of the planned "private protected" C# access modifier?


As part of the Roslyn documentation on GitHub, there's a page called Language feature implementation status, with planned language features for C# and VB.

One feature I couldn't wrap my head around was private protected access modifier:

private protected string GetId() { … } 

There is also a page of C# Language Design Notes, which explains many new features, but not this one.

Eric Lippert said in a comment:

Your error is in thinking of the modifiers as increasing restrictions. The modifiers in fact always decrease restrictions. Remember, things are "private" by default; only by adding modifiers do you make them less restricted.

What is the meaning of private protected? When might I use it?


Solution

  • According to "Professional C# 2008" by De Bill Evjen and Jay Glynn, page 1699:

    private protected - "only derived types within the current assembly"

    C++/CLI has a similar feature - Define and Consume Classes and Structs (C++/CLI) > Member visibility:

    private protected -or- protected private - Member is protected inside the assembly but private outside the assembly.