3

このコードがあり、そのクラスのコンストラクターに追加したという理由だけで、エラーが生成されます。

class NestedClass
{
   class A
   {
      A() {}
   }

   class B
   {
       // no constructor
   }

   public static void run()
   {
     A a = new A();  // error
     B b = new B(); // no error
   }
}

エラーは次のとおりです。

NestedExample.A is inaccessible due to protection level

これを説明してください。

ありがとう :)

4

6 に答える 6

7

あなたのコンストラクタはprivate. クラス メンバーの既定のアクセス修飾子は ですprivate

   class A
   {
      A() {}
   }

これは正しい実装です

   class A
   {
      public A() {}
   }
于 2012-12-28T10:35:29.550 に答える
6

コンストラクターを public として定義する

public A() { }

クラスのコンストラクターAプライベートです

プライベート コンストラクター (C# プログラミング ガイド) - MSDN

コンストラクターでアクセス修飾子を使用しない場合でも、デフォルトでプライベートになることに注意してください。


B で機能する理由は、コンストラクターを指定していないことと、デフォルトのコンストラクターの場合です。

コンストラクター - MSDN

クラスが静的でない限り、コンストラクターのないクラスには、 クラスのインスタンス化を有効にするために、C# コンパイラーによってパブリックの既定のコンストラクターが与えられます。

于 2012-12-28T10:35:36.760 に答える
3

コンストラクターを public として定義する

public class A
{
    public A() {}
}
于 2012-12-28T10:35:29.883 に答える
3

A のコンストラクターはプライベートです。A の外部からアクセスすることはできません。同時に、B にはコンストラクターがまったくないため、デフォルトのパブリック コンストラクターが取得されます。

于 2012-12-28T10:36:42.067 に答える
1

指定する必要があります。デフォルトはプライベートであり、B の場合、コンパイラはパラメーターなしのパブリック コンストラクターを提供します。したがって、それを指定する必要があります。class A

class A
{
    public A() { }
}
于 2012-12-28T10:37:12.457 に答える
0

ネストされたクラスを作成publicすると、問題が解決されます。run メソッドは公開されていますが、使用するクラスが公開されていないため、問題が発生します。

于 2012-12-28T10:36:32.720 に答える