0

シングルトン オブジェクトが必要な C# でアプリケーションを作成しています。したがって、そのクラスのオブジェクトは 1 つだけになります。しかし、そのクラスにはシステムの別のクラスのオブジェクトへの参照のリストが必要なので、そのようなリストを属性として追加し、別のオブジェクトを追加するメソッドを作成しました。

正しいと思いましたが、パラメーターの型 (リストに含まれるクラス) がメソッド (AddNew次のコード) よりもアクセスしにくいというエラーが発生します。

これが私がこれまでに持っているものです:

namespace One {
   public sealed class Singleton {
      // Only instance of the class:
      private static readonly Singleton instance = new Singleton ();
      private List<MyOtherClass> list;

      static Singleton() { }
      private Singleton() {
         list = new List<MyOtherClass>();
      }

      // Accessor to the property (the instance per se):
      public static Singleton Instance {
         get {
            return instance;
         }
      }

      // Method to add a new object to the list:
      public void AddNew(MyOtherClass newObject) {
         list.Add(newObject);
      }
   }
}

オブジェクトがそのリスト内にあるクラスは、次のように定義されます。

namespace One {
   class MyOtherClass {
      ... // With private attributes and public constructor and methods.
   }
}

問題はどこにあるのでしょうか? 私が望んでいたことを達成することは不可能ですか?クラスは public であり、singleton クラスが定義されているのと同じ名前空間に存在します。

4

2 に答える 2

3

問題はどこにあるのでしょうか?

まさにコンパイラの言うこと。MyOtherClassは(暗黙的に)内部クラスですが、それをパブリッククラスのパブリックメソッドへのパラメーターとして含めましたが、これを行うことはできません。

オプション:

  • 内部Singletonにする
  • 内部AddNewにする
  • 公開MyOtherClassする

名前空間はアクセス修飾子とは完全に別のものであることに注意してください。ここでは関係ありません。

于 2013-07-14T21:01:13.920 に答える
2

あなたMyOtherClassは ですinternalが、あなたのSingleton.AddNewメソッドは公開されています。

保護修飾子を指定しない場合、最上位クラスはデフォルトで internal になります。

于 2013-07-14T21:01:07.357 に答える