訪問控制 : 語言和平臺

程序邏輯上的組織方式(如名稱空間,包等)可以和部署時的分發方式(如程序集,jar包等)不同,那麼不同class間的相互訪問權限應該在邏輯組織上限制還是物理分發上限制呢?

Java

語言本身

採用了對邏輯組織方式進行限制,即你可以訪問java.lang中的私有類而能夠通過編譯,只要你自己的代碼也以java.lang爲包名[我猜的,沒試過]

運行時

採用了對物理分發方式進行限制,可能跟缺省的ClassLoader有關,即使你通過編譯了,但部署時同一包名下的類分成了不同的jar包,那麼對私有類的訪問可能會出錯[我猜的,沒試過]

.Net

CLS

不知道,希望補充

C#

對物理分發方式即程序集進行限制,從語言到運行時都是如此

個人傾向於C#的權限控制,合理且靈活;Java中當邏輯和物理組織不同時,不是被迫把一個class彆扭的挪到當前package,就是把它聲明爲public,而一旦聲明爲public,你就再也控制不了了

傳統的訪問控制已超出了語言本身的範圍,屬於平臺特性了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章