“公众\朋友”与“朋友\朋友”

Posted

技术标签:

【中文标题】“公众\\朋友”与“朋友\\朋友”【英文标题】:"Public \ Friend" vs "Friend \ Friend"“公众\朋友”与“朋友\朋友” 【发布时间】:2011-08-10 12:55:16 【问题描述】:

我最近一直在阅读 VB.Net 中的访问修饰符,有一些我无法真正理解的内容:Class(或Module)中的元素如何继承其封闭块的修饰符?

例如,假设您在程序集中有一个FriendBla,并带有一个公共方法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 指定publicFriend 并不重要,因为封闭类仅在此程序集中可用。

可以选择限制方法/属性的访问修饰符而不是类的访问修饰符。在您的示例中,方法 Foo 也可以是私有的,这意味着该方法对调用者不可用,包括同一程序集中的其他类。

可以通过类/实例访问方法。如果类是private,那么public方法有什么用?

编辑:附带说明,您可以将Bla 的实例返回给调用者(在其他程序集中)。在这种情况下,调用者应该能够调用public 方法,如果Foo 被声明为public。这是我的假设。

【讨论】:

感谢您的回答!当然,对于私有类,公共方法几乎没有任何意义(至少,不是我所知道的;) @shahkalpesh:如果Bla 具有Friend 修饰符,则无法将Bla 的实例传递给另一个程序集。实现这一目标的最佳方式是通过反思。 这是一个相当老的话题,但我想提一下 Private 类中的 Public 成员可能非常有用 - 例如在模块中。该类对该模块来说是私有的,并且该模块可以访问它的公共成员。然而,类 Private 成员对类外的模块不可用。【参考方案2】:

如果有人确实跳过了访问Bla 所需的反射环,他们无需再次这样做即可调用Public Sub Foo,但他们为Friend Sub Foo 这样做。

【讨论】:

以上是关于“公众\朋友”与“朋友\朋友”的主要内容,如果未能解决你的问题,请参考以下文章

朋友(friend.cpp)

获取 google plus 用户好友

你不得不了解的Flutter与ARCore

真正的朋友:缘于品,敬于德,交于情

用Python监控你的女朋友/男朋友每天都在看哪些网站!

微信朋友朋友圈自定义分享内容