受保护的内部类在类中工作但不在外部工作

我正在尝试一些事情,并想知道为什么会发生这种情况。

说,我在命名空间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 { } } } 

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

看看错误。

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

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

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

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

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

除非在另一个类中,否则无法protected类。

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

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

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

在第一种情况下,您在namespace内声明了类。 对命名空间没有任何多态支持,因此在namespace没有任何使用受保护类的方法

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

任何不是封闭类型(类)成员的东西都没有意义protected受保护的成员仅适用于那些从包含该成员的已定义类型派生的人,并且在第一个示例中您缺少该类型定义。