Skip to content

PROTECTED:(访问控制)


TypeClass 中指定受保护成员访问控制

语法

vb
Type typename

Protected:

member declarations

End Type

参数

typename

TypeClass 的名称

member declarations

字段、函数或枚举的声明

描述

Protected: 表示其后的 member declarations(成员声明)具有受保护访问权限。

受保护成员只能从其所属 TypeClass 的成员过程内部,以及从该 TypeClass 派生的类中访问。从此类成员过程内部来看,就好像受保护成员实际上是公共的,无论对哪个对象应用访问运算符都是如此。

Protected: 之后的 member declarations 保持受保护,直到给出不同的访问控制修饰符,如 Private:Public:

Type 声明中的成员默认为 Public:(如果未给出成员访问控制修饰符)。

示例

start GeSHi

vb
Type animal
  Dim As String animalName
  Protected:
    Dim As Integer serialNumber
End Type

Type dog Extends animal
  Dim As String masterName
  Declare Sub setSerialNumber ( ByVal number As Integer )
End Type

Sub dog.setSerialNumber ( ByVal number As Integer )
  '' 这是正确的。我们在派生类型的成员函数内部
  This.serialNumber = number
End Sub

Dim As dog d

'' 这是正确的,animalName 是公共的
d.animalName = "Buddy"

'' 这将产生编译错误:
'' - serialNumber 是受保护的,我们试图在其类型和派生类型之外访问它
'' d.serialNumber = 123456789

end GeSHi

start GeSHi

vb
' 使用受保护访问控制的示例,管理员权限为用户权限提供令牌:
'    - 'admin_right' 类型继承 'user_right' 类型。
'    - 直接创建 'user_right' 对象是禁止的。
'         ('默认 user_right.constructor' 访问和 '复制 user_right.constructor' 访问均为 'Protected')
'    - 'user_right' 类型只有获取令牌的访问权限。
'         ('user_right.token' get 属性访问为 'Public','user_right.token' set 属性访问为 'Protected')
'    - 'admin_right' 类型有设置和获取令牌的访问权限。
'         ('admin_right.token' get 属性访问和 'admin_right.token' set 属性访问均为 'Public')
'
' 创建一个 'admin_right' 对象,然后定义一个类型为 'user_right' 的引用指向该对象。
'    (直接创建 'user_right' 对象是禁止的)

Type user_right
  Public:
    Declare Property token () As String          '' 'Public' 授权 user_right 令牌获取
  Protected:
    Declare Constructor ()                       '' 'Protected' 禁止 user_right 对象默认构造
    Declare Constructor (ByRef u As user_right)  '' 'Protected' 禁止 user_right 对象复制构造
    Declare Property token (ByRef s As String)   '' 'Protected' 禁止 user_right 令牌设置
  Private:
    Dim As String user_right_token               '' 'Private' 禁止从 user_right 外部访问
End Type

Constructor user_right ()  '' 默认构造函数
End Constructor

Constructor user_right (ByRef u As user_right)  '' 受保护复制构造函数
  This.user_right_token = u.user_right_token
End Constructor

Property user_right.token () As String  '' 公共属性 user_right 令牌获取
  Return This.user_right_token
End Property

Property user_right.token (ByRef s As String)  '' 受保护属性 user_right 令牌设置
  This.user_right_token = s
End Property

Type admin_right Extends user_right
  Public:
    Declare Property token () As String         '' 'Public' 授权 admin_right 令牌获取
    Declare Property token (ByRef s As String)  '' 'Public' 授权 admin_right 令牌设置
End Type

Property admin_right.token () As String  '' 公共属性 admin_right 令牌获取
  Return Base.token                      '' 'Base.' 访问被此属性名遮蔽的基类型属性
End Property

Property admin_right.token (ByRef s As String)  '' 公共属性 admin_right 令牌设置
  Base.token = s                                '' 'Base.' 访问被此属性名遮蔽的基类型属性
End Property

Dim As admin_right ar       '' 创建 admin_right 类型对象 'ar'
ar.token = "fxm123456789"   '' admin_right 为 user_right 设置令牌
Print "'" & ar.token & "'"  '' admin_right 获取 user_right 令牌
Print

Dim ByRef As user_right ur = ar  '' 创建类型为 'user_right' 的引用 'ur' 指向 admin_right 类型的 'ar' 实例
Print "'" & ur.token & "'"       '' user_right 获取其令牌
'ur.token = "fxm0"               '' 错误:非法成员访问,USER_RIGHT.TOKEN.property.set(user_right 无法设置其令牌)

'Dim As user_right ur1       '' 错误:默认构造函数没有公共访问权限
'Dim As user_right ur2 = ar  '' 错误:构造函数没有公共访问权限

Sleep

end GeSHi

方言差异

与 QB 的区别

  • FreeBASIC 新增

参见

  • Class
  • Private: (访问控制)
  • Public: (访问控制)
  • Type

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系