由于部分罗斯林在GitHub上的文档,有一个页面调用语言功能执行情况 ,计划语言功能为C#和VB。
一个功能,我不能换我周围的人头上private protected
的访问修饰符:
private protected string GetId() { … }
还有的网页C#语言设计说明 ,这也解释了许多新的功能,但不是这一个。
埃里克利珀在说评论 :
你的错误是在修饰符越来越多的限制的思路。 其实修饰符总是减少限制。 请记住,事情是“私有”默认情况下; 只有通过添加改性剂做你让他们少受限制。
是什么意思private protected
? 我什么时候可以使用它?
据“ 专业C#2008 ”,由德比尔·埃弗拿和Jay Glynn,为1699页:
私人保护 - “仅在当前组件中的派生类型”
C ++ / CLI具有类似的特征- 定义和消费类和结构(C ++ / CLI)>会员能见度 :
private protected
-或- protected private
-成员在该组件内的保护,但私人组装之外。
以下是维恩图限制更加淫乱的所有访问修饰符,从更多:
private
:
private protected
: - 增加在C#7.2
internal
:
protected
:
protected internal
:
public
:
这仅仅是提供(随做http://ashitani.jp/gv/不同的可访问性水平(图片不适合评论)的)。
每个箭头的意思是“比更严格”。
CLR的名字是Private
, FamilyANDAssembly
, Assembly
, Family
, FamilyORAssembly
, Public
。
很久以后编辑:原来这个漂亮的新的访问级别(一个真正可怜的名字) 没有最终包含在C#6.0。 它只是从C#7.2的支持(我看到你更新你的问题“标签”)。
这只是一个猜测,但是从名字你可能想这是更受限制的版本protected
(或更宽松的版private
,如果你愿意的话)。 而且它的唯一合理的变体限制protected
行为装配。
可能的用法:那么你希望有protected
的内部实现,而不是外部的用途(你不想密封类)。
PS它总是存在CLR,但不是在C# 。 它的组合protected
和 internal
,报价:
CLR还支持“家庭和组装”访问类型。 这意味着,该方法是从声明类型,嵌套和派生类型,但只有当他们在同一个程序正在申报中访问。 那么,显然C#球队并没有认为这是一个非常有用的功能,所以它不会在这门语言的支持。
“可能是”只对在同一组件的子类可见。 这就有点受限制比protected
。
见规格的“私人保护”功能:
的私人保护的直观含义是“从包含类派生类型此组件中的访问”。