Show/Hide Toolbars

XSharp

用途

向编译器声明一个结构名。

语法

 [Attributes] [Modifiers] STRUCTURE <idStructure>
 [IMPLEMENTS <idInterface>[, <IdInterface2>,..]

 [StructureMembers]

 END STRUCTURE

参数

Attributes一个可选的特性列表,用于描述实体的元信息,例如在 MsTest 类库中包含测试的方法/函数上的 [TestMethod] 属性。请注意,当特性写在关键字上方的行时,特性必须在同一行或以分号结尾。

 

Modifiers一个可选的修饰符列表,用于指定实体的可见性或范围,例如:PUBLIC, PROTECTED, HIDDEN, INTERNAL, SEALED, ABSTRACT 或 STATIC.

 

<idStructure>结构的有效标识符名称。 结构是一个实体,因此与其他实体共享相同的名称空间。 这就意味着不可能出现结构和全局变量同名的情况。

 

IMPLEMENTS <idInterface>该结构实现的接口名称

 

StructrureMembers可以是以下任何一种: ACCESS, ASSIGN, CONSTRUCTOR, DESTRUCTOR, EVENT, METHOD, OPERATOR, PROPERTY, 就像在 CLASS 声明中一样

 

在本例中,变量 x 和 z 被输入为 INT,而变量 cName 和 cAddr 被输入为 STRING。

描述

在向编译器声明结构名之后,紧跟其后的是 0 个或多个实例变量声明语句。 使用结构名声明变量(参见本指南中的 GLOBAL 和 LOCAL 语句)的目的是保存特定类的实例、实例化类的实例、定义方法(参见本指南中的 METHOD 语句)和类的子类。

备注

实例变量的绑定:实例变量可以是早期绑定或晚期绑定,这取决于您如何声明它们以及如何使用它们。

 

如果在编译时知道变量的内存位置,则会发生早期绑定。编译器确切地知道如何引用变量,因此可以生成相应的代码。

 

如果在编译时不知道变量的内存位置,则需要进行晚期绑定。编译器无法从程序源代码中确定变量的确切位置或如何引用它,因此会生成代码在表中查找符号。查找是在运行时执行的。

 

由于早期绑定的实例变量不需要运行时查找,因此与晚期绑定变量相比,使用它们将显着提高应用程序的性能。以下表总结了四种类型的实例变量的绑定和可见性问题。

 

变量类型绑定                                可见性        
EXPORT如果可能,尽早绑定        全应用程序 CLASS 和全模块 STATIC CLASS        
INSTANCE永远是后期绑定                在类和子类中        
HIDDEN永远是前期绑定                仅在类中        
PROTECT永远是前期绑定                在类和子类中

 

对象实例化:  声明类后,使用类名和实例操作符 {} 创建类的实例。 语法如下

<idClass>{[<uArgList>]}

其中 <uArgList> 是以逗号分隔的可选值列表,这些值作为参数传递给一个名为 Init() 的特殊方法(有关 Init() 方法的更多信息,请参阅本指南中的 METHOD 语句)。

 

访问实例变量:  从外部访问导出的实例变量(即从任何不是其类方法的实体)的语法如下:

<idObject>:<idVar>

只有在可以看到非导出实例变量的方法中,才能访问这些变量。 在一个方法中,可以使用以下语法访问所有实例变量:

[SELF:]<idVar>

SELF: 前缀是可选的,除非是 ACCESS/ASSIGN 方法(更多信息请参阅本指南中的 ACCESS 和 ASSIGN 语句,以及 METHOD 语句中有关 SELF 的更多信息)。

实例变量与其他程序变量一样。 您可以在语言中允许使用表达式的任何地方访问它们。

 

XSharp 不再支持 [STATIC] 前缀

示例

下面的示例定义了两个类,其中一个继承了另一个的值,并演示了如何创建一个带有实例变量初始值的类实例:

 

 

参见

ACCESS, ASSIGN, CONSTRUCTOR, DESTRUCTOR, EVENT, METHOD, OPERATOR, PROPERTY