受保护的内部类类中的工作,但没有工作以外(protected internal class work

2019-07-31 13:50发布

我是想一些事情,想知道为什么会发生如此。

我说,我有一个命名空间ň称为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
      {
      }
   }      
}

我失去了什么理论? 它很有点混乱。

Answer 1:

看看错误。

在一个命名空间中定义的元素不能被明确声明为private,protected或受保护的内部

只有内部或公共成员被允许类外。

你的第二个案例是定义B级A类的成员,这就是为什么你没有得到错误。

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

类和结构被声明直接在名称空间内(换句话说,没有被嵌套在其它类或结构内 )可以是公共的或内部的。 内部是如果没有指定访问修饰符是默认。



Answer 2:

类不能被protected除非它是另一个类中。

protected关键字仅适用于一类的成员 。 在第二个例子中, class B恰好是该成员。

想想看:
protected手段:派生类可以访问此成员。
至于有没有这样的概念衍生的命名空间,在protected关键字不为命名空间的成员才有意义。



Answer 3:

保护声明的派生类型的可见程度。

在你的第一个情况下,你声明类的内部namespace 。 没有名称空间的任何polymophic支持,因此不存在使用受保护类的任何SENCE namespace

在第二种情况下,相反,你使用它的其他CLASSE(类中的A ),这使得它为所有儿童可见A类。



Answer 4:

任何不是一个封闭类型(类)的成员都没有什么意义进行protectedprotected成员只对那些访问谁从包含该成员的定义类型派生,而在第一个例子情况下,您缺少类型定义。



文章来源: protected internal class working within class but not working outside