我试图以以下方式实现单身类(我使用VS2008 SP1):

namespace firstNamespace
{
   class SingletonClass
   {
      private SingletonClass() {}

      public static readonly SingletonClass Instance = new SingletonClass();
   }
}

当我想从不同的名称空间中的类中访问它(似乎这是问题,在同一名称空间中起作用)如下:

namespace secondNamespace
{
   ...
   firstNamespace.SingletonClass inst = firstNamespace.SingletonClass.Instance;
   ...
}

我收到编译器错误:

error CS0122: 'firstNamespace.SingletonClass' is inaccessible due to its protection level

有人知道如何解决这个问题吗?

提前谢谢了!

有帮助吗?

解决方案

您缺少关键字 public 从您的班级定义。

其他提示

听起来更像是单身人士在另一个组装中。类的默认修饰符是内部的,因此只能在汇编中访问。

SingletonClass具有内部的可见性,因此,如果两个名称空间在不同的组件中,则整个类都无法访问。

改变

class SingletonClass

public class SingletonClass

改变

class SingletonClass

public class SingletonClass

公开标记,因此可以访问

甚至更好:

public sealed class SingletonClass

由于成员是静态的:

这里还有更多

你上课 SingletonClass 在其他名称空间中可见。但是在其他组件/项目中不可见。

您的班级是私人的。这意味着您当前项目中的所有代码(= assembly = .dll)可以看到此类。但是,该类被隐藏在其他项目中的代码。

名称空间和组件之间存在薄弱的相关性。一个名称空间可以存在于多个汇编中,例如mscorlib.dll和system.dll都包含系统名称空间。

但是通常,当您在Visual Studio中创建一个新项目时,您将获得一个新的名称空间。

您还可以在一个组件中添加多个名称空间。创建新文件夹时,这将在Visual Studio中自动发生。

你单身班 班级 不是公开的,所以在外面看不到 名称空间 部件.

更正: :评论是对的,如所说 MSDN:

未嵌套在其他类或结构中的类和结构可以是公共的或内部的。任何其他类型都可以访问为公共的类型。 仅在同一组件内通过类型访问的一种类型. 。除非在上一个示例中,否则类和结构默认为内部,除非将关键字公共添加到类定义中。类或结构定义可以添加内部关键字以显式访问级别。访问修饰符不会影响班级或结构本身 - 它始终可以访问自身及其所有成员。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top