Frage

Ich habe versucht, eine Singleton -Klasse auf folgende Weise zu implementieren (ich verwende VS2008 SP1):

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

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

Wenn ich aus einer Klasse in einem anderen Namespace darauf zugreifen möchte (es scheint, dass dies das Problem ist, funktioniert es im gleichen Namespace) wie:

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

Ich bekomme einen Compiler -Fehler:

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

Hat jemand eine Idee, wie er das lösen kann?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Ihnen fehlt das Schlüsselwort public aus Ihrer Klassendefinition.

Andere Tipps

Klingt eher nach dem Singleton in einer anderen Versammlung. Der Standardmodifikator für eine Klasse ist intern und nur in der Baugruppe zugänglich.

Die Singletonclass hat eine interne Sichtbarkeit. Wenn sich also die beiden Namespaces in verschiedenen Baugruppen befinden, ist die gesamte Klasse in nicht zugänglich.

Veränderung

class SingletonClass

zu

public class SingletonClass

Rückgeld

class SingletonClass

zu

public class SingletonClass

um es öffentlich zu markieren, so zugänglich

oder noch besser:

public sealed class SingletonClass

Da sind die Mitglieder statisch:

mehr hier

Du Klasse SingletonClass ist in anderen Namespaces sichtbar. In anderen Versammlungen/Projekten ist es jedoch nicht sichtbar.

Ihre Klasse ist privat. Dies bedeutet, dass jeder Code in Ihrem aktuellen Projekt (= Assembly = .dll) diese Klasse sehen kann. Die Klasse ist jedoch für Code in anderen Projekten versteckt.

Es besteht eine schwache Korrelation zwischen dem Namespace und der Baugruppe. Ein Namespace kann in mehreren Baugruppen vorhanden sein, z. B. mscorlib.dll und system.dll beide enthalten den System -Namespace.

Wenn Sie jedoch ein neues Projekt in Visual Studio erstellen, erhalten Sie normalerweise einen neuen Namespace.

Sie können der einen Baugruppe auch mehrere Namespaces hinzufügen. Dies geschieht automatisch in Visual Studio, wenn Sie einen neuen Ordner erstellen.

Sie Singletonklasse Klasse ist nicht öffentlich, ist also außerhalb der nicht sichtbar Namespace Montage.

Korrektur: Die Kommentare sind richtig, wie sagt msdn:

Klassen und Strukturen, die nicht in anderen Klassen oder Strukturen verschachtelt sind, können entweder öffentlich oder intern sein. Ein als öffentlich deklarierter Typ ist von jedem anderen Typ zugänglich. Ein als intern deklarierter Typ ist nur nach Typen innerhalb derselben Baugruppe zugänglich. Klassen und Strukturen werden standardmäßig als intern deklariert, es sei denn, das Keyword Public wird der Klassendefinition hinzugefügt, wie im vorherigen Beispiel. Klassen- oder Strukturdefinitionen können das interne Schlüsselwort hinzufügen, um ihre Zugriffsebene explizit zu gestalten. Zugriffsmodifikatoren beeinflussen weder die Klasse noch die Struktur selbst - sie hat immer Zugriff auf sich selbst und alle eigenen Mitglieder.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top