“公众\朋友”与“朋友\朋友”
Posted
技术标签:
【中文标题】“公众\\朋友”与“朋友\\朋友”【英文标题】:"Public \ Friend" vs "Friend \ Friend"“公众\朋友”与“朋友\朋友” 【发布时间】:2011-08-10 12:55:16 【问题描述】:我最近一直在阅读 VB.Net 中的访问修饰符,有一些我无法真正理解的内容:Class
(或Module
)中的元素如何继承其封闭块的修饰符?
例如,假设您在程序集中有一个Friend
类Bla
,并带有一个公共方法Foo
:
Friend Class Bla
Public Sub Foo
(...)
End Class
它的行为是否与 Foo
设置为好友时不同?如果是这样,你建议哪一个?
Friend Class Bla
Friend Sub Foo
(...)
End Class
谢谢!
【问题讨论】:
你的标题不是暗示你的第二个代码块应该是 Public Class Bla 和 Friend Sub Foo? 查看这篇文章:***.com/questions/5652564/… 【参考方案1】:在我看来,为Foo
指定public
或Friend
并不重要,因为封闭类仅在此程序集中可用。
可以选择限制方法/属性的访问修饰符而不是类的访问修饰符。在您的示例中,方法 Foo
也可以是私有的,这意味着该方法对调用者不可用,包括同一程序集中的其他类。
可以通过类/实例访问方法。如果类是private
,那么public
方法有什么用?
编辑:附带说明,您可以将Bla
的实例返回给调用者(在其他程序集中)。在这种情况下,调用者应该能够调用public
方法,如果Foo
被声明为public
。这是我的假设。
【讨论】:
感谢您的回答!当然,对于私有类,公共方法几乎没有任何意义(至少,不是我所知道的;) @shahkalpesh:如果Bla
具有Friend
修饰符,则无法将Bla
的实例传递给另一个程序集。实现这一目标的最佳方式是通过反思。
这是一个相当老的话题,但我想提一下 Private 类中的 Public 成员可能非常有用 - 例如在模块中。该类对该模块来说是私有的,并且该模块可以访问它的公共成员。然而,类 Private 成员对类外的模块不可用。【参考方案2】:
如果有人确实跳过了访问Bla
所需的反射环,他们无需再次这样做即可调用Public Sub Foo
,但他们为Friend Sub Foo
这样做。
【讨论】:
以上是关于“公众\朋友”与“朋友\朋友”的主要内容,如果未能解决你的问题,请参考以下文章