什么是计划中的“私人保护” C#访问修饰符的含义是什么?什么是计划中的“私人保护” C#访问修饰符的

2019-06-17 09:44发布

由于部分罗斯林在GitHub上的文档,有一个页面调用语言功能执行情况 ,计划语言功能为C#和VB。

一个功能,我不能换我周围的人头上private protected的访问修饰符:

private protected string GetId() { … } 

还有的网页C#语言设计说明 ,这也解释了许多新的功能,但不是这一个。

埃里克利珀在说评论 :

你的错误是在修饰符越来越多的限制的思路。 其实修饰符总是减少限制。 请记住,事情是“私有”默认情况下; 只有通过添加改性剂做你让他们少受限制。

是什么意思private protected ? 我什么时候可以使用它?

Answer 1:

据“ 专业C#2008 ”,由德比尔·埃弗拿和Jay Glynn,为1699页:

私人保护 - “仅在当前组件中的派生类型”

C ++ / CLI具有类似的特征- 定义和消费类和结构(C ++ / CLI)>会员能见度 :

private protected -或- protected private -成员在该组件内的保护,但私人组装之外。



Answer 2:

以下是维恩图限制更加淫乱的所有访问修饰符,从更多:

private

private protected : - 增加在C#7.2

internal

protected

protected internal

public



Answer 3:

这仅仅是提供(随做http://ashitani.jp/gv/不同的可访问性水平(图片不适合评论)的)。

每个箭头的意思是“比更严格”。

CLR的名字是PrivateFamilyANDAssemblyAssemblyFamilyFamilyORAssemblyPublic


很久以后编辑:原来这个漂亮的新的访问级别(一个真正可怜的名字) 没有最终包含在C#6.0。 它只是从C#7.2的支持(我看到你更新你的问题“标签”)。



Answer 4:

这只是一个猜测,但是从名字你可能想这是更受限制的版本protected (或更宽松的版private ,如果你愿意的话)。 而且它的唯一合理的变体限制protected行为装配。

可能的用法:那么你希望有protected的内部实现,而不是外部的用途(你不想密封类)。

PS它总是存在CLR,但不是在C# 。 它的组合protected internal ,报价:

CLR还支持“家庭和组装”访问类型。 这意味着,该方法是从声明类型,嵌套和派生类型,但只有当他们在同一个程序正在申报中访问。 那么,显然C#球队并没有认为这是一个非常有用的功能,所以它不会在这门语言的支持。



Answer 5:

“可能是”只对在同一组件的子类可见。 这就有点受限制比protected



Answer 6:

见规格的“私人保护”功能:

的私人保护的直观含义是“从包含类派生类型此组件中的访问”。



文章来源: What is the meaning of the planned “private protected” C# access modifier?