2

私はいくつかのことを試みていましたが、なぜそうなっているのか知りたいです。

たとえば、名前空間nにAというクラスがあり、保護された内部クラスBを作成しようとしていました。

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

しかし、私がこのようにしようとすると(AのサブクラスとしてのB)、エラーをスローせず、成功を収めました。なぜそうなのか説明してもらえますか?

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

理論的に何かが欠けていますか?そのかなり混乱します。

4

3 に答える 3

2

protectedクラスは、別のクラス内にある場合を除いて存在することはできません。

キーワードは、クラスのメンバーにprotectedのみ有効です。2番目の例では、たまたまそのメンバーです。class B

考えてみてください。
protectedつまり、派生クラスはこのメンバーにアクセスできます。
派生名前空間などの概念がないため、protectedキーワードは名前空間のメンバーには意味がありません。

于 2012-09-13T09:53:55.117 に答える
2

エラーを見てください。

名前空間で定義された要素は、private、 protected、またはprotectedinternalとして明示的に宣言することはできません

クラス外では、内部または公開のメンバーのみが許可されます。

2番目のケースは、クラスBをクラスAのメンバーとして定義することです。これが、エラーが発生しない理由です。

Access Modifiers C#が表示される場合があります

名前空間内で直接宣言されている(つまり、他のクラスまたは構造体内にネストされていない)クラスおよび構造体は、パブリックまたは内部のいずれかになります。アクセス修飾子が指定されていない場合、内部がデフォルトです。

于 2012-09-13T09:54:12.823 に答える
1

protectedは、派生型の可視性レベルを宣言します。

最初のケースでは、クラスを内部で宣言しますnamespace。名前空間のポリモフィックサポートはないため、保護されたクラスを使用する意味はありません。namespace

2番目のケースでは、代わりに、他のクラス(class A)内で使用します。これにより、クラスのすべての子に表示されますA

于 2012-09-13T09:56:09.797 に答える