Show/Hide Toolbars

XSharp

Navigation: X# 文档 > X# 入门

新的语言特性

Scroll Prev Top Next More

 

下面列出了 X#  Core 方言与 Visual Objects 和 Vulcan 相比最明显的一些新语言特性。

 

正如您所看到的,X# 引入了许多新的关键字,但这些关键字都是推荐的:它们在其他地方也将被识别为标识符,因此您很少需要为避免命名冲突而进行更改。

 

文件名

描述

DEFINE <id> := <Expression>

在 X# 中,VO Define 又回来了。它将被编译为 Globals 类的一个常量,所有函数和方法都是在该类中实现。与 Vulcan.NET 中的预处理器 DEFINE 相比,DEFINE 的最大优势在于,与方法、属性或变量同名的 DEFINE 不再可能导致难以理解的编译器错误。.

USING STATIC <Name>

使用 USING 的 STATIC 修饰符(注意不再需要 # 号)可以命名一个静态类。这样,您就可以将该类的方法作为函数使用。例如:

 
      Using Static System.Console  

      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# 的所有功能。

 
  Class MyList<T> Where T Is Class

  ..

  End Class

 
或者

 
  Class MyList<T> Where T Is ICustomer, New()

  ..

  End Class  

ASYNC - AWAIT

ASYNC AWAIT 基础结构在 X# 中完全可用

<Expression> IS <Type>

允许检查类型的表达式。可以代替 IsInstanceOf() 使用,而且效果更好

Conditional Access Operator ?:
<Expression> ? <Expression>

属性、方法等的有条件访问。例如

 
  nCount  := MyList?:Count  

 
这句的意思是:

 
  Var temp := MyList

  If temp  != Null  

     nCount := temp:Count

  Endif

 
问号左侧的表达式只计算一次!

<Expression> DEFAULT <Expression>

默认操作符允许内联 NULL 检查:

 
  lResult := Foo() DEFAULT Bar()

 
这句的意思是:

 
lResult := Foo()
  IF lResult == NULL    
     lResult := Bar()
  ENDIF

 
Foo() 只计算一次。只有当结果为 NULL 时,Bar() 才会被求值。

y := CHECKED(x)

告诉编译器生成检查溢出的代码

y := UNCHECKED(x)

告诉编译器生成检查溢出的代码

LINQ Query 表达式现在支持:

 
Var CustQuery = From Cust In Customers ;

  Where Cust.City = "Athens" ;

  ORDER By Cust.Zipcode Select Cust

X# 将支持完整的 LINQ 功能

 
FROM LET WHERE JOIN ORDER BY EQUALS INTO

YIELD RETURN <Value>

可用于声明为枚举器类型的方法中。这将指示编译器自动生成一个实现了枚举器的类,并直接在 YIELD RETURN 行返回调用代码。下次调用枚举器时,代码将记住上次执行代码时的位置,并在 YIELD RETURN 行之后的下一条语句中继续执行。