protected internal class foo
{
//this compiles without any errors
}
还有
internal class bar
{
public int quix;
protected internal int zyx;
//this compiles without any errors
}
这些是编译器错误还是我对标准的误解?
解释:
- 根据 MSDN,类不能具有 protected 内部访问修饰符,只能是 public 或 internal(直接在命名空间内声明的类和结构(换言之,未嵌套在其他类或结构中的类和结构)可以是 public或内部。如果未指定访问修饰符,则默认为内部)。
- 并非所有访问修饰符都可以在所有上下文中由所有类型或成员使用,并且在某些情况下,类型成员的可访问性受到其包含类型 (MSDN) 的可访问性的限制。公众应该失败。 protected 内部对我来说是模棱两可的 - 不需要内部修饰符。
编辑: 我使用 Mono 的事实是不必要的,因为问题是关于标准说什么而不是 MONO 做什么或不做什么。也许我正在编写自己的编译器。这就是为什么我引用 MSDN 来准确说明什么是允许的,什么是不允许的。
最佳答案
如我上面的评论所述,protected internal
表示protected
或 internal
NOT protected
和 内部
。这里没有错误:)
更多信息/解释在 haacked 上
回答您的问题:
命名空间中的类(而不是另一个类中的类)只能声明为
public
或internal
。 但是,另一个类中的一个类可以声明为protected internal
、private
等是的,
protected internal
可以在访问修饰符比其成员更严格的类中使用,请参阅下面的完全有效用法示例(请注意,该类是在Program
类中):public class Program { static void Main(string[] args) { } private class Foo { private int priv { get; set; } protected internal int protint { get; set; } public int pub { get; set; } } }
关于c# - 命名空间内 protected 内部类编译无误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14476279/