Previous topicNext topic
Help > 开发指南 > 编程基础 > VB编程基础 >
隐式转换

在VB.Net中我们在对变量赋值时可以将一些可以互相转换的类型进行简单地赋值,而不需要先进行类型转换。比如下面的示例,我们并不会得到任何错误。

示例1:字符串与数值型相互赋值

Dim x As String = 5 
Dim y As Integer = "5" 
Dim b As Boolean = "True" 

示例2:Enum枚举类型和整数型相互赋值

Dim a As EnumType = 4 
Dim v As Integer = EnumType.EnumValue 

示例3:object类型赋值给具体的类

Private Sub ButtonClick(sender As Object, e As EventArgs) 
    Dim btn As Button = sender
End Sub 

示例4:object类型赋值给具体的类

Private Sub ButtonClick(sender As Button, e As EventArgs) 
    Dim data As Contact = sender.Tag 
End Sub

请注意,可以进行隐式转换的前提是,本身赋值的数据就是可以合法地进行转换的。如果你将“1234.adfb”这种非法的字符串赋值给整数变量的话,那是必然会报错的。我们可以利用好这个特性,在我们写代码时定义控件、在内部函数给传入参数定义变量赋值时偷偷懒,少些一些类型转换的代码。

有了隐式转换的特性,我们甚至可以让两个Object类型进行数值计算,比如。

Dim a As Object=1
Dim b As Object=3
MsgBox(a*b)

我们知道,在绝大多数场景下,我们取DataRow和RowData的结果时,返回的都是Object类型,有了这个特性,我们就可以让我们的代码少写很多类型转换,代码编写也更简洁。

 Vb.Net
If Proj.CurrentGrid Is Nothing Then
    Return
End If
Dim dr As RowData=Proj.CurrentGrid.CurrentRowData
MessageBox.Show("统计结果:" & dr("数量")*dr("单价"))

同样的功能,如果用C#来写的话,就必须进行类型转换。代码简洁度上会差一点。

 C#
if (Proj.CurrentGrid == null)
    return;
RowData dr = Proj.CurrentGrid.CurrentRowData;
MessageBox.Show("统计结果:" + dr["数量"].CType<int>() * dr["单价"].CType<double>());