Visual Basic 中的访问级别

声明元素 的访问级别 是访问它的能力的范围,即代码有权读取或写入它。 这不仅取决于声明元素本身的方式,还取决于元素容器的访问级别。 无法访问包含元素的代码无法访问其包含的任何元素,即使是声明为 Public的元素。 例如, Public 可以从包含结构的类内部访问结构中的变量 Private ,但不能从该类外部访问该变量。

公众

声明语句中的 Public 关键字指定可以从同一项目中的任何位置的代码、引用项目的其他项目以及从从项目生成的任何程序集访问该元素。 以下代码显示了一个示例 Public 声明:

Public Class ClassForEverybody

只能在模块、接口或命名空间级别使用 Public 。 这意味着可以在源文件或命名空间级别或接口、模块、类或结构中声明公共元素,但不能在过程中声明。

受保护

声明语句中的 Protected 关键字指定只能从同一类中或从派生自此类的类访问该元素。 以下代码显示了一个示例 Protected 声明:

Protected Class ClassForMyHeirs

只能在类级别使用,并且只能在声明类的成员时使用 Protected 。 这意味着可以在类中声明受保护的元素,但不能在源文件或命名空间的级别或接口、模块、结构或过程中声明。

朋友

声明语句中的 Friend 关键字指定可以从同一程序集内访问该元素,但不能从程序集外部访问。 以下代码显示了一个示例 Friend 声明:

Friend stringForThisProject As String

只能在模块、接口或命名空间级别使用 Friend 。 这意味着可以在源文件或命名空间的级别或接口、模块、类或结构中声明友元元素,但不能在过程中声明。

受保护的好友

声明语句中的 Protected Friend 关键字组合指定元素可以从派生类、同一程序集或两者兼有中进行访问。 以下代码显示了一个示例 Protected Friend 声明:

Protected Friend stringForProjectAndHeirs As String

只能在类级别使用,并且只能在声明类的成员时使用 Protected Friend 。 这意味着可以在类中声明受保护的友元元素,但不能在源文件或命名空间的级别或接口、模块、结构或过程中声明。

私人

声明语句中的 Private 关键字指定只能从同一模块、类或结构中访问该元素。 以下代码显示了一个示例 Private 声明:

Private _numberForMeOnly As Integer

只能在模块级别使用 Private 。 这意味着可以在模块、类或结构中声明私有元素,但不能在源文件或命名空间级别、接口或过程中声明私有元素。

在模块级别, Dim 不带任何访问级别关键字的语句等效于 Private 声明。 但是,你可能想要使用 Private 关键字使代码更易于阅读和解释。

专用保护

声明语句中的 Private Protected 关键字组合指定只能从同一类中访问该元素,以及从与包含类相同的程序集中找到的派生类进行访问。 从 Visual Basic 15.5 开始支持Private Protected访问修饰符。

下面的示例显示了一个 Private Protected 声明:

Private Protected internalValue As Integer

只能在类内声明 Private Protected 元素。 不能在接口或结构中声明它,也不能在源文件或命名空间的级别、接口或结构或过程中声明它。

Private Protected Visual Basic 15.5 及更高版本支持访问修饰符。 若要使用它,请将以下元素添加到 Visual Basic 项目 (*.vbproj) 文件。 只要系统上安装了 Visual Basic 15.5 或更高版本,就可以利用 Visual Basic 编译器最新版本支持的所有语言功能:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

若要使用 Private Protected 访问修饰符,必须将以下元素添加到 Visual Basic 项目 (*.vbproj) 文件:

<PropertyGroup>
   <LangVersion>15.5</LangVersion>
</PropertyGroup>

有关详细信息 ,请参阅设置 Visual Basic 语言版本

访问修饰符

指定访问级别的关键字称为 访问修饰符。 下表比较了访问修饰符:

访问修饰符 授予的访问权限级别 可以使用此访问级别声明的元素 可在其中使用此修饰符的声明上下文
Public 无限制的:

任何可以看到公共元素的代码都可以访问它
接口

模块

课程

结构

结构成员

过程

性能

成员变量

常量

枚举

事件

外部声明

代表
源文件

Namespace

接口

模块

班级

结构
Protected 派生的:

声明受保护元素的类或派生自它的类中的代码可以访问该元素
接口

课程

结构

过程

性能

成员变量

常量

枚举

事件

外部声明

代表
班级
Friend 集会:

在程序集内声明友元元素的代码可以访问它。
接口

模块

课程

结构

结构成员

过程

性能

成员变量

常量

枚举

事件

外部声明

代表
源文件

Namespace

接口

模块

班级

结构
Protected Friend ProtectedFriend 的联合:

与受保护的友元元素所在的同一类或同一程序集中的代码或者从该元素的类派生的任何类中的代码都可以访问它
接口

课程

结构

过程

性能

成员变量

常量

枚举

事件

外部声明

代表
班级
Private 声明上下文:

声明私有元素的类型中的代码(包括包含的类型中的代码)可以访问该元素
接口

课程

结构

结构成员

过程

性能

成员变量

常量

枚举

事件

外部声明

代表
模块

班级

结构
Private Protected 在类中声明私有受保护元素的代码,或在与 bas 类相同的程序集中找到的派生类中的代码。 接口

课程

结构

过程

性能

成员变量

常量

枚举

事件

外部声明

代表
班级

另请参阅