Show/Hide Toolbars

XSharp

X# 编译器可以识别 X# 的不同方言。下表显示了这些方言之间的区别。
您可以使用 /dialect 编译器选项来选择要使用的方言。

默认使用 Core 方言。除 Core 方言外,其他方言都需要引用 XSharp 运行时动态链接库

 

功能

Core

VO

Vulcan

Harbour

Xbase++ 14

FoxPro

关键词的4 个字母的缩写(FUNC、WHIL 等).

-

Yes 11

-

Yes 11

遵循 Xbase++ 的约定

Yes 11

&& 作为单行注释的用法(// 的替代语法)

-

Yes

-

Yes

Yes

Yes

* 作为首字符用于注释的用法

Yes

Yes

Yes

Yes

Yes

Yes

ALIAS (->) 操作符

-

Yes

Yes

Yes

Yes

Yes

使用 AND, NOT, OR, XOR 替代 .AND., .NOT. 等

-

-

-

-

-

Yes

ARRAY 类型,包括 Array 字面量和 NULL_ARRAY,包括缺失元素(的 Array)

-

Yes

Yes

Yes

Yes

Yes

BREAK 语句

-

Yes

Yes

Yes

Yes

Yes

BEGIN SEQUENCE .. RECOVER .. END SEQUENCE

-

Yes

Yes

Yes

Yes

Yes

CLIPPER 调用约定(需要 USUAL 支持)

-

Yes

Yes

Yes

Yes

Yes

CODEBLOCK 类型

-

Yes

Yes

Yes

Yes

Yes

DATE 类型,包括 NULL_DATE

-

Yes

Yes

Yes

Yes

Yes

DATE 和 DateTime 字面量

Yes

Yes

Yes

Yes

Yes

Yes

包含可选类型子句的 DEFINE 语句

Yes

Yes

Yes

Yes

Yes

Yes

FIELD 语句,并识别为字段名而不是局部变量或者变量实例

-

Yes

Yes

Yes

Yes

Yes

FLOAT 类型,包括 Float 字面量和 /vo14 编译器选项

-

Yes

Yes

Yes

Yes

Yes

FOR .. ENDFOR 替代 FOR .. NEXT

-

-

-

-

Yes

Yes

FOR EACH 替代 FOREACH

-

-

-

-

-

Yes

GLOBAL 语句

Yes

Yes

Yes

Yes

Yes

Yes

IIF() 表达式和 /vo10 编译器选项

Yes 7

Yes 7

Yes 7

Yes

Yes

Yes

后期绑定

-

Yes (with /lb+)

Yes (with /lb+)

Yes

Yes

Yes

LPARAMETERS 语句

-

-

-

-

-

Yes

MACRO 编译器

- 13

Yes

Yes

Yes

Yes

Yes

MEMVAR, PUBLIC, PRIVATE, PARAMETERS 语句,包括未声明变量 14

-

Yes

-

Yes

Yes

Yes

PSZ 类型,包括 NULL_PSZ 和(伪) PSZ 转换函数 (String2Psz(), Cast2Psz()

-

Yes

Yes

Yes

Yes

Yes

PSZ 索引

n/a

1 based

0 based

1 based

1 based

1 based

NULL_STRING

Yes 9

Yes 9

Yes

Yes

Yes

Yes

SYMBOL 类型,包括 Symbol 字面量和 NULL_SYMBOL

-

Yes

Yes

Yes

Yes

Yes

源文件中第一个实体之前的 Statements

-

-

-

-

-

Yes

USUAL 类型,包括 NIL 字面量 (1,2)

-

Yes

Yes

Yes

Yes

Yes 15

TEXT 命令

-

-

-

-

-

Yes

特殊功能




Yes

Yes

Yes

VOSTRUCT AS / IS 语法 (10)

-

Yes

Yes

-

-

-

UNION AS / IS 语法 (10)

-

Yes

Yes

-

-

-

未定义类型的字面量数组(Untyped Literal Arrays)

-

Yes 8

Yes 8

Yes

Yes

Yes

允许不定义类型(Missing types allowed)

-

Yes 3

Yes 3

Yes

Yes

Yes

函数/方法调用中允许缺少参数 MyFunc(1,,2)

-

Yes

Yes

Yes

Yes

Yes

伪函数




Yes

Yes

Yes

PCount(), _GetMParam(), _GetFParam(), _Args()

-

Yes 4

Yes 4

Yes 4

Yes 4

Yes 4

SLen()

-

Yes 5

Yes 5

Yes 5

Yes 5

Yes 5

_Chr()

-

Yes

Yes

Yes

Yes

Yes

AltD()

-

Yes 6

Yes 6

Yes 6

Yes 6

Yes 6

PCall, PCallNative

-

Yes

Yes

Yes

Yes

Yes

CCall, CCallNative

-

Yes

Yes

Yes

Yes

Yes

其他信息







Generated Function class name

Functions
X$<ModuleName>$Functions
for static functions and globals

<AssemblyName>.Functions (DLLs)
<AssemblyName>.Exe.Functions (EXEs)
<AssemblyName>.Exe.$<ModuleName>$.Functions
for static functions and globals


 

1.需要 VulcanRT.DLL 或 XSharp.VO.DLL

 

2.需要 VulcanRTFuncs.DLL 或 XSharp.VO.DLL

 

3.缺少定义的类型会被翻译为 USUAL。使用新的 /vo15 编译器选项,您可以告诉编译器不允许缺少类型定义。

 

4.仅支持在函数和方法中使用 Clipper 调用约定

 

5.Vulcan 运行时没有 SLen() 函数。编译器会将其转换为访问字符串的 Length 属性。

 

6.这将被转换为:

 
 IF System.Diagnostics.Debugger.Attached
         System.Diagnostics.Debugger.Break()
 ENDIF

 

7.在 Core 方言中,每个表达式都被转换为 OBJECT。在其他方言中,表达式被转换为 USUAL。

 

8.在 VO/Vulcan 方言中,非类型化字面量数组被转换为 VO 数组类型:

 
{"aa", "bb", "cc"}

 
类型字面量数组的前缀是 <Type>,如下所示:

 
<STRING>{"aa", "bb", "cc"}

 
这就变成了字面量字符串数组

 

9. /vo2 编译器选项会将 NULL_STRING 编译为空字符串。否则编译为 NULL。

 

10.VOSTRUCT 和 UNION 可以用标准的 .NET 结构代替。对于 Union,您需要在结构体上使用 [StructLayout(LayoutKind.Explicit)] 特性(attribute),并在每个字段上使用 [FieldOffSet()] 特性(attribute)来明确定义字段的位置。

 

11.仅适用于与 VO 兼容的关键字,不适用于 Vulcan 或 XSharp 中引入的关键字。

 

12.在 Harbour 和 Xbase++ 中,IIF() 的 true 和 false 表达式是可选的。

 

13.不支持宏编译器。然而,当你在 Core 方言中使用 RDD 系统时,索引表达式仍将使用宏编译器,并且需要引用 XSharp.RT.DLL 以支持宏编译器。

 

14.这需要 XSharp 运行时。

.

15.在 FoxPro 中不允许使用 NIL,并将其重新定义为 FALSE。