2

我尝试了几件事,想知道为什么会这样。

比如说,我在命名空间 n 中有一个名为 A 的类,我试图创建受保护的内部类 B。

namespace n
{
   public class A
   {
      public A()
      {
      }
   }
   protected internal class B //throwing error
   {
   }
}

但是当我这样尝试(B作为A的子类)时,它不会抛出错误并且它是成功的。你能解释一下为什么会这样吗?

namespace n
{
   public class A
   {
      public A()
      {
      }
      protected internal class B // its not throwing error
      {
      }
   }      
}

理论上我错过了什么吗?它有点令人困惑。

4

3 回答 3

2

一个类不能存在,protected除非它在另一个类中。

protected关键字仅对类的成员有效。在您的第二个示例中,class B恰好是该成员。

想一想:
protected意思是:派生类可以访问这个成员。
由于没有派生命名空间这样的概念,因此该protected关键字对命名空间的成员没有意义。

于 2012-09-13T09:53:55.117 回答
2

看看错误。

命名空间中定义的元素不能显式声明为 private、protected或 protected internal

只允许内部或公共成员在课堂外。

您的第二种情况是将 B 类定义为 A 类的成员,这就是您没有收到错误的原因。

您可能会看到访问修饰符 C#

直接在命名空间中声明的类和结构(换句话说,不嵌套在其他类或结构中)可以是公共的或内部的。如果未指定访问修饰符,则默认为 Internal。

于 2012-09-13T09:54:12.823 回答
1

protected声明派生类型的可见性级别。

在你的第一种情况下,你在里面声明类namespace。没有对命名空间的任何多态支持,因此没有任何使用受保护类的感觉namespace

相反,在第二种情况下,您在其他类(类A)中使用它,这使得它对A类的所有孩子可见。

于 2012-09-13T09:56:09.797 回答