5

私は(私はVS2008 SP1を使用)、次のようにシングルトンクラスを実装してみました:、私は別の名前空間内のクラスからアクセスしたい場合には(これが問題であると思われC#のシングルトンは同じ名前空間にないと "アクセス不可"ですか?

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 

誰かがこれを解決する方法のアイデアを持っていますか?

事前に感謝します。

+0

あなたの迅速で有益な返信に感謝します。 –

答えて

10

クラス定義のキーワードpublicがありません。

-1

あなたSingletonClass クラスはそう 名前空間 アセンブリ外に表示されていない、公開されていません。

修正msdnを言うようにコメントは、右のとおりです。

Classes and structs that are not nested within other classes or structs can be either public or internal. A type declared as public is accessible by any other type. A type declared as internal is only accessible by types within the same assembly. Classes and structs are declared as internal by default unless the keyword public is added to the class definition, as in the previous example. Class or struct definitions can add the internal keyword to make their access level explicit. Access modifiers do not affect the class or struct itself — it always has access to itself and all of its own members.

+1

名前空間は内部可視性には関係ありません。クラスが宣言されているアセンブリです。 –

+0

名前空間の外側に表示されます。 –

2

SingletonClassは、内部の視認性を持っているので、2つの名前空間が異なるアセンブリ、アクセスできないでクラス全体にある場合。

変更

class SingletonClass 

public class SingletonClass 
3

はシングルトンが異なるアセンブリである以上のような音。クラスのデフォルトの修飾子はinternalであるため、アセンブリ内でのみアクセスできます。

2

変更

class SingletonClass 

public class SingletonClass 

には、公共のためにアクセス可能マークする

またはより良い:

public sealed class SingletonClass 

メンバーは静的なので:

more here

1

あなたのクラスSingletonClass他の名前空間に表示されます。しかし、それは他のアセンブリ/プロジェクトでは見えません。

あなたのクラスはプライベートです。これは、現在のプロジェクト(= Assembly = .dll)のすべてのコードがこのクラスを参照できることを意味します。しかし、クラスは他のプロジェクトのコードのために隠されています。

名前空間とアセンブリの間には弱い相関があります。 1つの名前空間は複数のアセンブリに存在することができます。たとえば、mscorlib.dllとSystem.dllの両方にSystem名前空間が含まれています。

通常、Visual Studioで新しいプロジェクトを作成すると、新しい名前空間が作成されます。

1つのアセンブリに複数の名前空間を追加することもできます。これは、新しいフォルダを作成するときにVisual Studioで自動的に発生します。

+0

清算してくれてありがとう - 私はこれに新しいです。 –

関連する問題