下面列出了 X# Core 方言与 Visual Objects 和 Vulcan 相比最明显的一些新语言特性。
正如您所看到的,X# 引入了许多新的关键字,但这些关键字都是推荐的:它们在其他地方也将被识别为标识符,因此您很少需要为避免命名冲突而进行更改。
文件名 |
描述 |
---|---|
DEFINE <id> := <Expression> |
在 X# 中,VO Define 又回来了。它将被编译为 Globals 类的一个常量,所有函数和方法都是在该类中实现。与 Vulcan.NET 中的预处理器 DEFINE 相比,DEFINE 的最大优势在于,与方法、属性或变量同名的 DEFINE 不再可能导致难以理解的编译器错误。. |
USING STATIC <Name> |
使用 USING 的 STATIC 修饰符(注意不再需要 # 号)可以命名一个静态类。这样,您就可以将该类的方法作为函数使用。例如: Function Start As Void WriteLine("X# is cool!") Return |
Begin Using <Var> <Statements> End [Using] |
USING 模块允许您控制变量的生存期。如果有一个析构<Var>函数,那么一旦块完成,它就会被自动析构 |
Switch <Expression> Case <Const> <Statements> Case <Const2> Case <Const3> <Statements> Otherwise <Statements> End [SWITCH] |
与 DO CASE 命令相比,SWITCH 语句生成的跳转结构更有效。此外,表达式只被计算一次。 |
Begin Unsafe <Statements> End [UNSAFE] |
允许在此代码块的上下文中使用不安全代码,与整个项目的编译器设置无关。 |
Begin Checked <Statements> End [Checked]
也允许作为表达式
x := Checked(y) |
无论整个项目的编译器设置如何,代码块内的语句都将进行 checked 转换。 |
Begin Unchecked <Statements> End [Unchecked]
也允许作为表达式
x := UNCHECKED(y) |
无论整个项目的编译器设置如何,块内的语句都将进行 unchecked 转换。 |
VAR <Identifier> := <Expression> |
这是 LOCAL IMPLIED 的同义词 |
Class <Id> < <ParamName> > Where <TypeConstraints> <Classmembers> End [Class] |
X# 现在支持创建泛型类,并具备 C# 的所有功能。 .. End Class .. End Class |
ASYNC - AWAIT |
ASYNC AWAIT 基础结构在 X# 中完全可用 |
<Expression> IS <Type> |
允许检查类型的表达式。可以代替 IsInstanceOf() 使用,而且效果更好 |
Conditional Access Operator ?: |
属性、方法等的有条件访问。例如 If temp != Null nCount := temp:Count Endif |
<Expression> DEFAULT <Expression> |
默认操作符允许内联 NULL 检查: |
y := CHECKED(x) |
告诉编译器生成检查溢出的代码 |
y := UNCHECKED(x) |
告诉编译器生成不检查溢出的代码 |
LINQ Query 表达式现在支持: Where Cust.City = "Athens" ; ORDER By Cust.Zipcode Select Cust |
X# 将支持完整的 LINQ 功能 |
YIELD RETURN <Value> |
可用于声明为枚举器类型的方法中。这将指示编译器自动生成一个实现了枚举器的类,并直接在 YIELD RETURN 行返回调用代码。下次调用枚举器时,代码将记住上次执行代码时的位置,并在 YIELD RETURN 行之后的下一条语句中继续执行。 |