2017-01-15 46 views
0

我已閱讀關於新修飾符「open」和「fileprivate」的文檔。但有兩件事我不明白:「open」和「public」的使用

  1. 爲什麼不能將協議或擴展聲明爲「open」?這是否意味着在模塊外部使用這些東西是不可能的?
  2. 如果我不想爲一個模塊構建我的類,而是使用一個普通的應用程序,我是否應該將我的類和方法聲明爲「打開」,還是僅將它們保留爲「公共」是一種好的做法?

回答

0

由於this answer說:

  • 公開課是定義模塊的訪問和子類化之外。一個公開的類成員可以在定義模塊之外訪問和覆蓋。
  • 公共類是可訪問的,但不能在定義模塊之外進行子類化。公共類成員是可訪問的,但不能在定義模塊之外進行覆蓋。

我認爲你的第一個問題的答案是,你不能覆蓋或繼承一個協議或擴展。因此,open沒有用處,因爲public已經讓它們可以在模塊之外訪問。

對於第二個問題,我想說如果你打算重寫或繼承,你應該只聲明自己的類爲open。否則,您允許不必要的訪問這些項目。大多數時間public應該適合您的需求。

編輯

由於@Alex指出,我不認爲有很多缺點,以使這個「額外的訪問」。我能想到的唯一事情就是如果你只是想保護你的班級免受你未來的自我影響,但是這可能會或可能不適用。因此,如果不是這種情況,默認情況下將其設置爲open應該沒有太大的危害。

+0

我會偏愛'open'的一面。你不能真正預見到其他人想要繼承你的類的情況。如果沒有理由反對它,沒有理由不默認允許它。 – Alexander

+0

當然,您希望公衆可以訪問您的課程的內部工作,但不希望過度騎馬(例如,如果這些方法的行爲對班級的運作至關重要)。在這種情況出現之前,「open」是要走的路:) – Alexander

+0

@Alexander是啊,這就是爲什麼我把它放在首位的「公開」>「開放」,但你說得對,大部分的時間沒有必要 –