在java中,您擁有包級別保護,可確保類只能在包內使用。C#訪問修飾符僅用於暴露名稱空間內的類
C#中的命名空間或多或少地像包一樣行事。但C#沒有用於保護名稱空間內的類的保護級別。
這是否有特定的原因?
在java中,您擁有包級別保護,可確保類只能在包內使用。C#訪問修飾符僅用於暴露名稱空間內的類
C#中的命名空間或多或少地像包一樣行事。但C#沒有用於保護名稱空間內的類的保護級別。
這是否有特定的原因?
沒有這樣的訪問修飾符:最接近的修飾符是internal
,但保護單元是類所在的程序集,而不是其名稱空間。
有人可能會爭辯說有可能使用internal
來實現類似的控制級別,因爲這兩種限制使得外部人員無法訪問庫的實現細節。唯一能夠影響到的人是你,圖書館的作者,而且你完全掌握要揭露什麼和隱藏什麼。從本質上講,這意味着如果你不想在名字空間外使用一個類,那麼不要使用它;如果班級是internal
,則其他人也不能使用該班級。
這是真的。但是您可能希望將實現細節隱藏到構建庫的代碼的使用者。我主要想知道自己爲何存在差異。 – Jaco
@Jaco如果你想隱藏一個班級和其他人爲你的班級編寫同一個程序集的代碼,那麼這些班級被假定爲你的同事。如果他們開始使用你的內部課程,你可以走到他們身邊,並且有一個很好的和平對話來解釋使用那些不適合他們使用的東西的危險:-) – dasblinkenlight
你不能隱藏任何東西,因爲有人得到反編譯器並看到他們需要的一切。嚴重的是,命名空間沒有任何規定。這就像在你的電腦中存儲文件夾一樣。類訪問修飾符管理一切。事實上,如果你的命名空間中沒有公共類型,那麼當引用程序集時,你甚至不會看到那個命名空間。 –
在.NET中有assemlies(DLL或EXE文件),則可以使用internal
修飾符只能在同一組件
是否有此特殊原因限制訪問?
大多數情況下,這是因爲有一些關鍵differences between packages and namespaces
爲了簡化什麼已經在鏈接的問題,並在此間表示,在C#中的命名空間大多以幫助組織程序集的內容,內部和外部。 Java包與C#程序集有更多共同之處,並且C#中有一個訪問修飾符限制爲程序集級別:internal。
c#有程序集,你可以使用'internal'關鍵字。 –