簡體   English   中英

C#中的Singleton在不在同一名稱空間時“無法訪問”?

[英]Singleton in C# “inaccessible” when not in the same namespace?

我嘗試以下列方式實現單例類(我使用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都包含System命名空間。

但通常,當您在Visual Studio中創建新項目時,您將獲得一個新的命名空間。

您還可以向一個程序集添加多個名稱空間。 創建新文件夾時,這會在Visual Studio中自動發生。

您的SingletonClass 不公開,因此在 命名空間 程序集外部不可見。

更正 :評論是正確的,如msdn所述

未嵌套在其他類或結構中的類和結構可以是公共的或內部的。 聲明為public的類型可由任何其他類型訪問。 聲明為internal的類型只能由同一程序集中的類型訪問 默認情況下,類和結構聲明為內部,除非將關鍵字public添加到類定義中,如上例所示。 類或結構定義可以添加內部關鍵字以使其訪問級別顯式。 訪問修飾符不會影響類或結構本身 - 它始終可以訪問自身及其所有成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM