Show/Hide Toolbars

XSharp

 

USUAL 类型是一种可以包含任何数据类型的数据类型。它内部包含一个类型标志和一个值。这种类型可以存储任何值。

编译器对这种类型进行特殊处理。当您将 USUAL 类型的值分配给另一种类型时,编译器不会警告您,但会自动生成必要的转换操作。

 

USUAL 主要用于与无类型代码兼容。不建议在新代码中使用它,因为编译器无法对一个或多个操作数为 USUAL 的表达式执行任何类型检查。任何数据类型错误只能在运行时发现。

 

作为 USUAL 声明的局部变量、参数和字段也比强类型变量产生更多的运行时开销。

 

可以将字面值 NIL 分配给任何类型为 USUAL 的存储位置。NIL 值表示没有任何其他数据类型或值,并在概念上等同于将 NULL 存储到引用类型中。NIL 是未初始化的本地 USUAL 变量的默认值。

 

当“:”运算符的左操作数为 USUAL 时,编译器将生成对指定为右操作数的方法、字段或属性的后期绑定调用。如果运行时 USUAL 中包含的值没有这样的成员,成员类型不正确或不可访问,或者名称评估为方法且参数数量或其类型不正确,则此调用可能失败。必须启用 /lb 编译器选项才能将 USUAL 用作“:”运算符的左操作数,否则将引发编译时错误。

 

数值运算和混合类型的 USUAL 变量

当您在数值操作中组合两个常规变量时,结果的类型取决于操作数的类型。
主导原则是我们尽量不丢失小数部分。

 

通用规则如下:

 

当左侧为小数时,结果也是左侧类型的小数

当左侧不是小数且右侧为小数时,结果为右侧类型

当两侧都是整数时,结果取两者中较大的类型。

 

 

LHS        

\ RHS

LONG

INT64

FLOAT

CURRENCY

DECIMAL

LONG


LONG

INT64

FLOAT

CURRENCY

DECIMAL

INT64


INT64

INT64

FLOAT

CURRENCY

DECIMAL

FLOAT


FLOAT

FLOAT

FLOAT

FLOAT

FLOAT

CURRENCY


CURRENCY

CURRENCY

CURRENCY

CURRENCY

CURRENCY

DECIMAL


DECIMAL

DECIMAL

DECIMAL

DECIMAL

DECIMAL

 

实现

USUAL 类型在 XSharp.__Usual 结构中实现。