参数类型的可访问性低于单例实现中的方法

本文关键字:于单例 实现 方法 类型 访问 参数 | 更新日期: 2023-09-27 18:22:13

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

我认为这是正确的,但我遇到了一个错误,其中参数类型(列表中的类)的可访问性不如方法(以下代码中的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.
   }
}

问题出在哪里?难道不可能实现我想要的吗?该类是公共的,并且位于定义singleton类的同一命名空间中。

参数类型的可访问性低于单例实现中的方法

问题出在哪里?

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

选项:

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

请注意,名称空间与访问修饰符是完全独立的——它们在这里无关紧要。

您的MyOtherClassinternal,但Singleton.AddNew方法是公共的。

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