编程VB.NET 中级/领导开发者

解释一下 Visual Basic 中 Friend 访问修饰符的工作原理,举例说明它的使用情况,以及说明在什么情况下 Friend 比其他修饰符更为合适。

用 Hintsage AI 助手通过面试

答案。

在 Visual Basic 中,Friend 修饰符定义了类成员(方法、属性、变量)在同一程序集内可用,但在程序集外不可用。这类似于 C# 中的 internal。这种访问级别有助于在公开 API 的同时保护代码的内部实现。

使用示例:

' 在同一项目/程序集内 Friend Class InternalHelper Friend Sub Log(message As String) Console.WriteLine(message) End Sub End Class

调用 InternalHelper 类的方法只能在当前程序集内进行。

何时应用 Friend:

  • 对于需要对应用程序的其他部分可用但不对外部模块/库可用的类/方法。
  • 用于实现访问模式(例如,测试内部组件)。

考验问题。

Friend 访问修饰符与 Protected 有何不同?在另一程序集中的子类中,声明为 Friend 的方法能否被看到?

答案:

  • Friend — 仅在其程序集内可用(无论继承)。
  • Protected — 仅在子类中可用(无论程序集)。
  • 一个 Friend 级别的方法对位于当前程序集外的子类将不可用。如果需要在继承和程序集内都可访问,使用 Protected Friend
Protected Friend Sub MyMethod() ' 在程序集内和外部子类中可访问 End Sub

由于对主题细微差别的不了解而导致的实际错误示例。


故事

在一个大型项目中,所有支持类的逻辑都被声明为 Public,这使它们对外部集成商开放。改为 Friend 后消除了在模块外使用内部方法的风险,并简化了架构的维护。


故事

由于访问错误(使用了 Protected 而不是 Friend),辅助方法对放置在同一项目中但不在类层次结构中的单元测试不可用。已修正为 Friend 以支持方便的测试。


故事

一个开发者试图使用 Friend 将方法暴露给从另一个程序集加载的插件。结果是插件无法访问所需的方法。解决方案是实现带有 Public 方法的接口,Friend 仅用于内部需求。