介绍基于继承或实现的类型转换操作。
在 Object 数据类型之间来回转换时,DirectCast 不使用 Visual Basic 运行时帮助器例程进行转换,因此它可以提供比 CType 更好一些的性能。
使用 DirectCast 关键字的方法与使用 CType 函数和 TryCast 关键字相同。提供一个表达式作为第一个参数,提供一个类型以将它转换为第二个参数。DirectCast 需要两个参数的数据类型之间的继承或实现关系。这意味着一个类型必须继承或实现另一个类型。
错误和失败
如果 DirectCast 检测到不存在继承或实现关系,则生成一个编译器错误。但是没有出现编译器错误并不能保证肯定进行了成功的转换。如果需要的转换为收缩转换,则可能在运行时失败。如果发生这种状况,运行库会引发一个 InvalidCastException 错误。
转换关键字
类型转换关键字的对比如下。
关键字
数据类型
参数关系
运行时故障
CType 函数
任何数据类型
必须在两种数据类型之间定义扩大转换或收缩转换
引发 InvalidCastException
DirectCast
任何数据类型
一个类型必须继承或者实现另一个类型
引发 InvalidCastException
TryCast
仅引用类型
一个类型必须继承或者实现另一个类型
返回 Nothing (Visual Basic)
下面的示例演示 DirectCast 的两种用法,一种在运行时发生失败,另一种取得成功。
1
2
3
4
5
6
7
8
|
Dim q As Object = 2.37
Dim i As Integer = CType (q, Integer )
' The following conversion fails at run time
Dim j As Integer = DirectCast (q, Integer )
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast (f, System.Windows.Forms.Control)
|
以上示例中,q 的运行时类型为 Double。CType 能够成功是因为 Double 可被转换为 Integer。但是,第一个 DirectCast 在运行时失败是因为 Double 的运行时类型与 Integer 没有继承关系,即使是可以进行转换。第二个 DirectCast 成功是因为它从 Form 类型转换为 Control 类型,而 Form 继承自该类型。
————————————————————————————————————————————
参考:
评论