[英]Can a properties class be accessed by other classes without using instantiation?
[英]Can internal classes be accessed within other namespaces?
我目前正在在線閱讀這本書: http : //www.angelfire.com/theforce/chewy0/csharp/Thinking_in_C-Sharp_.pdf
在第 23 頁(PDF 文檔的第 38 頁),它指出無法從外部命名空間內的類訪問內部類。
但是,在 Microsoft 在線文檔中,它指出內部類只能從同一個程序集訪問。
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/internal
根據我的理解,程序集可以包含來自多個命名空間的類。 這是否意味着從 Microsoft 文檔中可以跨不同的命名空間訪問內部類?
還是說內部類在其受尊重的程序集和命名空間中都是私有的?
所以這是摘錄,對吧?
Java 使用五個顯式關鍵字來設置類中的邊界:public、private、protected、internal 和 protected internal。 它們的用法和含義非常簡單。 這些訪問說明符確定誰可以使用后面的定義。 public 意味着每個人都可以使用以下定義。 另一方面,private 關鍵字意味着除了您(類型的創建者)在該類型的成員函數內部之外,沒有人可以訪問這些定義。 private 是你和客戶端程序員之間的一堵磚牆。 如果有人試圖訪問私有成員,他們將收到編譯時錯誤。 受保護的行為類似於私有,除了繼承類可以訪問受保護成員,但不能訪問私有成員。 繼承將很快介紹。 internal 通常被稱為“友好的”——定義可以被同一命名空間中的其他類訪問,就好像它是公共的一樣,但不能被不同命名空間中的類訪問。 命名空間將在#ref# [sic] 一章中深入討論。 protected internal 允許相同命名空間內的類(如 internal)或繼承類(如 protected)訪問,即使繼承類不在同一命名空間內。
C# 的默認訪問,如果您不使用上述說明符之一,就會發揮作用,是內部的
筆者大概混為一談Java的internal
用C#的internal
。
它們略有不同,因為 Java 沒有程序集; 它有包,將類組織到命名空間中。
在 c# 中,命名空間與可訪問性修飾符完全沒有關系。 只有同一程序集中的類才能訪問internal
類型或成員,除非您使用InternalsVisibleTo屬性。 命名空間無關緊要。
嗯,回答這個問題的最簡單方法是測試它 - 所以我在 1 個程序集中創建了 2 個命名空間,並訪問了一個內部變量。
簡短的回答 - Microsoft 文檔是正確的 - 即使您有 2 個不同的命名空間,也可以訪問同一程序集中的內部變量。
這是代碼:
namespace ConsoleApplication1
{
class Class1
{
internal string thing;
public Class1()
{
thing = "original data";
}
}
}
namespace ConsoleApplication2
{
class Class2
{
public ConsoleApplication1.Class1 class1= new ConsoleApplication1.Class1();
public Class2()
{
class1.thing = "other namespace modification";
}
}
}
調用 Class2 構造函數時,顯示修改后的數據。
var class2 = new ConsoleApplication2.Class2();
Console.WriteLine(class2.class1.thing);
結果:
"other namespace modification"
希望這有幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.