【问题标题】:"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

谢谢!

【问题讨论】:

标签: vb.net friend access-modifiers internal


【解决方案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 这样做。

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多