0

我正在用 C# 编写一个需要单例对象的应用程序;所以该类只有一个对象。但是那个类需要有一个对系统另一个类的对象的引用列表,所以我添加了这样一个列表作为属性,然后创建了一个方法来向它添加另一个对象。

我认为这是正确的,但我收到一个错误,其中参数类型(要在列表中的类)比方法(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.
   }
}

问题可能出在哪里?难道不能完成我想要的吗?该类是公共的,并且驻留在定义单例类的同一命名空间中。

4

2 回答 2

3

问题可能出在哪里?

正是编译器所说的。MyOtherClass是一个内部类(隐式),但是您已将其作为参数包含在公共类中的公共方法中,这是您无法做到的。

选项:

  • 使Singleton内部
  • 使AddNew内部
  • MyOtherClass公开_

请注意,命名空间与访问修饰符完全分开——它们在这里无关紧要。

于 2013-07-14T21:01:13.920 回答
2

MyOtherClassinternal,但你的Singleton.AddNew方法是公开的。

如果您不指定保护修饰符,则默认情况下顶级类是内部的。

于 2013-07-14T21:01:07.357 回答