Kob*_*obi 132 c# access-modifiers c#-6.0 c#-7.2
作为GitHub上Roslyn文档的一部分,有一个名为语言功能实现状态的页面,具有C#和VB的计划语言功能.
我无法理解的一个功能是private protected
访问修饰符:
private protected string GetId() { … }
Run Code Online (Sandbox Code Playgroud)
还有一个C#语言设计笔记页面,它解释了许多新功能,但不是这个.
Eric Lippert在评论中说:
您的错误在于将修饰符视为增加限制.实际上,修饰符总是减少限制.请记住,默认情况下,事物是"私人的"; 只有通过添加修饰符才能减少限制.
是什么意思private protected
?我什么时候可以使用它?
Kob*_*obi 184
以下是维恩图中的所有访问修饰符,从更多限制到更多混杂:
private
:
private protected
: - 在C#7.2中添加
internal
:
protected
:
protected internal
:
public
:
Gog*_*utz 97
根据De Bill Evjen和Jay Glynn撰写的" Professional C#2008 ",第1699页:
private protected - "仅当前程序集中的派生类型"
C++/CLI具有类似的功能 - 定义和消费类和结构(C++/CLI)>成员可见性:
private protected
- 或protected private
- - 成员在程序集内受到保护,但在程序集外部是私有的.
Jep*_*sen 27
这只是为了提供不同可访问性级别的图形(使用http://ashitani.jp/gv/制作)(图像不适合注释).
每个箭头表示"比限制更多".
CLR的名称Private
,FamilyANDAssembly
,Assembly
,Family
,FamilyORAssembly
,Public
.
很久以后编辑:事实证明,这个漂亮的新访问级别(名字真的很差)最终没有包含在C#6.0中.它仅受C#7.2支持(我看到你更新了你的问题"标签").