2011-04-21 26 views
2

最近我一直在閱讀VB.Net中的訪問修飾符,並且有些東西我真的不明白:Class(或Module)繼承其封閉塊的修飾符?「Public Friend」vs「Friend Friend」

例如,假設你有一個FriendBla類集會,與公共方法Foo

Friend Class Bla 
    Public Sub Foo 
    (...) 
End Class 

是否不同的表現時Foo設置爲朋友不是?如果是這樣,你建議哪一個?

Friend Class Bla 
    Friend Sub Foo 
    (...) 
End Class 

謝謝!

+1

是不是你的標題暗示你的第二個代碼塊應該是Public Class Bla和Friend Sub Foo? – 2011-04-21 18:52:13

+2

看看這個帖子:http://stackoverflow.com/questions/5652564/please-explain-behavior-when-class-and-member-have-different-access/5655177#5655177 – 2011-04-21 18:52:40

回答

1

在我看來,Foo是否指定publicFriend並不重要,因爲封閉類僅在此程序集中可用。

可以選擇限制訪問修飾符的方法/屬性比類的。在你的例子中,方法Foo也可以是private的,這意味着這個方法對於調用者是不可用的,包括同一個程序集中的其他類。

可以通過類/實例訪問方法。如果班級是private,那麼public方法有什麼用?

編輯:在旁註中,您可能會將Bla的實例返回給調用者(位於其他程序集中)。在這種情況下,如果Foo宣佈爲public,則主叫方應該能夠調用public方法。這是我的假設。

+0

感謝您的回答!當然,對於一個私人班級來說,公開的方法幾乎沒有任何意義(至少,不是我所知道的) – 2011-04-21 18:50:06

+0

@shahkalpesh:如果'Bla'不能將'Bla'的實例傳遞給另一個程序集,有一個「朋友」修飾符。實現這一點的最佳方式是通過反思。 – 2012-11-30 12:00:53

1

如果有人通過訪問Bla所需的反射跳火圈,他們並不需要再次這樣做,然後調用Public Sub Foo,但他們爲Friend Sub Foo做。

相關問題