c# - 命名空间内 protected 内部类编译无误

标签 c# .net mono internal protected

protected internal class foo
{
    //this compiles without any errors
}

还有

internal class bar
{
    public int quix;
    protected internal int zyx;
    //this compiles without any errors
}

这些是编译器错误还是我对标准的误解?

解释:

  1. 根据 MSDN,类不能具有 protected 内部访问修饰符,只能是 public 或 internal(直接在命名空间内声明的类和结构(换言之,未嵌套在其他类或结构中的类和结构)可以是 public或内部。如果未指定访问修饰符,则默认为内部)。
  2. 并非所有访问修饰符都可以在所有上下文中由所有类型或成员使用,并且在某些情况下,类型成员的可访问性受到其包含类型 (MSDN) 的可访问性的限制。公众应该失败。 protected 内部对我来说是模棱两可的 - 不需要内部修饰符。

编辑: 我使用 Mono 的事实是不必要的,因为问题是关于标准说什么而不是 MONO 做什么或不做什么。也许我正在编写自己的编译器。这就是为什么我引用 MSDN 来准确说明什么是允许的,什么是不允许的。

最佳答案

如我上面的评论所述,protected internal 表示protected internal NOT protected 内部。这里没有错误:)

更多信息/解释在 haacked

回答您的问题:

  1. 命名空间中的类(而不是另一个类中的类)只能声明为publicinternal但是,另一个类中的一个类可以声明为protected internalprivate

  2. 是的,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/

相关文章:

javascript - 用于在新窗口中打开 URL 的 HTML 按钮

c# - 如何在一个或多个 for 循环中使用现有变量?

c# - 在没有 NETCFSvcUtil 生成代理的情况下与 WCF 的 Compact Framework 通信

android - mono droid 和 mvvm cross 的奇怪异常无法解析 IoC 类型

c# 在将字符串移动到资源以进行本地化时如何处理换行符?

c# - 在幕后,C#/.NET 中的十进制值类型发生了什么?

c# - 将 MS.NET C# 嵌入到 c/c++(如单声道)

c# - 寻找 C# 中不同类型用户输入的数组列表声明的良好实践

f# - 使用 TPL 在 Linux 上编译 F#

c# - OracleConnectionPoolManager 在其终结器中抛出异常