Show/Hide Toolbars

XSharp

注意此命令在 Core 和 Vulcan 方言中不可用。

用途

创建在当前例程和调用例程中可见的变量和数组。

语法

PRIVATE <idVar> [:= <uValue>] | <ArraySpec> [, ...]
PRIVATE <idVar> [:= <uValue>] [AS <Type> [OF <ClassLibrary>] ]  // FoxPro 方言

参数

<idVar>要创建的私有变量的有效标识符名称。

 

<uValue>变量的初始值。 如果未指定,变量将被初始化为 NIL。

 

<ArraySpec>要创建的动态数组的规格。 <ArraySpec> 是以下内容之一:
<idArray>[<nElements>, <nElements>, <nElements>]
<idArray>[<nElements>][<nElements>][<nElements>]
除第一个 nElements 外,其他均为可选。
<idArray>        是要创建的数组的有效标识符名称。 数组元素初始化为 NIL。
<nElements>        定义数组特定维数的元素个数。 维数由指定 <nElements> 参数的个数决定。

 

<Type> & <ClassLibrary>编译器可以识别 FoxPro 方言中的 AS <Type> 和 AS <Type> of <Classlibrary> 子句。

描述

PRIVATE 是一条可执行语句,这意味着您必须在定义例程中的任何变量声明语句(如 FIELD、LOCAL 和 MEMVAR)之后指定它。

 

警告 除非未声明变量(Undeclared Variables)编译器选项被选中,否则使用此语句创建的任何变量引用都会产生编译器错误。

 

创建私有变量或数组时,同名的现有可见私有变量和公有变量将被隐藏,直到当前例程终止或显式释放私有变量。

 

由于 PRIVATE 不是编译器声明语句,因此编译器不会将与可见的同名已声明变量(如 LOCAL、GLOBAL 或 DEFINE)冲突的私有变量指定为错误。   相反,声明的变量将在运行时隐藏公有变量。 这意味着,在声明的变量被释放之前,你根本无法访问公有变量。

 

在类方法中,实例变量(ACCESS/ASSIGN变量除外)总是比同名的私有变量更可见。 如果存在名称冲突,请使用 _MEMVAR-> 别名 访问方法中的私有变量。 对于ACCESS/ASSIGN变量,使用 SELF: 前缀来覆盖名称冲突的私有变量。

 

除 PRIVATE 语句外,还可以通过以下方法创建私有变量:

为不存在或不可见的变量赋值将创建一个私有变量

使用 PARAMETERS 语句接收参数

 

私有变量是动态作用域。 它们一直存在,直到创建例程返回给调用者,或用 CLEAR ALL 或 CLEAR MEMORY 明确释放为止。

备注

兼容性:  不支持其他 Xbase 方言支持的 PRIVATE 语句中的 ALL、LIKE 和 EXCEPT 子句。

示例

下面的示例创建了两个 PRIVATE 数组和另外三个 PRIVATE 变量:

PRIVATE aArray1[10], aArray2[20], var1, var2, var3

下一个示例使用每个元素的寻址约定创建了一个多维私有数组:

PRIVATE aArray[10][10][10], aArray2[10, 10, 10]

本例使用 PRIVATE 语句创建和初始化数组和变量:

PRIVATE aArray := { 1, 2, 3, 4 }, ;
     aArray2 := ArrayNew(12, 24)
PRIVATE cChar := Space(10), cColor := SetColor()

参见

LOCAL, MEMVAR, PARAMETERS, PUBLIC, DIMENSION, DECLARE