【发布时间】:2014-05-16 09:05:04
【问题描述】:
作为 GitHub 上 Roslyn 文档的一部分,有一个名为 Language feature implementation status 的页面,其中包含 C# 和 VB 的计划语言功能。
我无法理解的一个功能是private protected 访问修饰符:
private protected string GetId() { … }
还有一个C# Language Design Notes的页面,里面解释了很多新功能,但没有这个。
Eric Lippert 在comment 中说:
您的错误在于将修饰符视为增加限制。修饰符实际上总是减少限制。请记住,默认情况下,事情是“私人的”;只有添加修饰符才能减少它们的限制。
private protected是什么意思?我什么时候可以使用它?
【问题讨论】:
-
注意VB language design notes下面有关于它的信息。
-
它是到 MethodAttributes.FamANDAssem 的映射。 C# 有一个奇怪的 internal 映射,它使用 (Private|FamANDAssem)。并且 internal protected 映射到 (Private|Family)。 CLR 属性很奇怪。
-
这个提议的功能会使我的评论不正确。
-
C# 设计团队为此功能发布了survey with suggested alternative syntax。其中一些很有趣,例如
protected & internal、assembly protected或proternal(我希望其中一些是笑话)。还有Discussion thread 有一些很好的见解。 -
功能现在在语言功能实施状态下被标记为撤回!我个人喜欢这个访问级别的想法,我认为它是一个有用的功能。我想根据类设计使用受保护来保留我的代码,但我不希望其他人编写可以访问这些成员的 hacky sublasses。 IMO 最好的解决方案是如果我们可以写
protected | internal和protected & internal
标签: c# access-modifiers c#-6.0 c#-7.2