|
语言兼容性
ASP 中使用的 VBScript 与 ASP.NET 中使用的 Visual Basic .NET 语言之间的差别是到目前为止所有潜在移植问题中最广泛的。在此发布版中,不仅
ASP.NET 从 VBScript 语言分离出来成为“真正的”Visual Basic,而且 Visual Basic 语言本身也经历了重大改变。这些改变旨在:
● 通过将具有相似用途的语言功能集中在一起,使语言更具一致性。
● 通过重新设计使 Visual Basic 不够“基本”的功能来简化语言。
● 通过重新设计向程序员隐藏了太多重要细节的功能,提高可读性和可维护性。
● 通过执行更好的做法(如类型安全编程)来提高可靠性。
本节重点介绍开始使用新的 Visual Basic 语言时可能遇到的一些常见问题。
● 不再使用 Set 和 Let,而是使用简单的变量赋值。
<%
' Old ASP syntax.
Dim MyConn
Set MyConn = Server.CreateObject("ADODB.Connection")
' New ASP.NET syntax.
Dim MyConn
MyConn = Server.CreateObject("ADODB.Connection")
%>
● 不再使用非索引默认属性。非索引默认属性使通常引用对象的表达式能够转而引用对象的默认属性。支持默认属性的令人遗憾的结果是使程序更难读,因为表达式的含义取决于其上下文。在
Visual Basic .NET 中,非索引属性必须始终在代码中显式指定。
<%
' Old ASP syntax (retrieving recordset column value).
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.Open("TestDB")
Set RS = MyConn.Execute("Select * from Products")
Response.Write RS("Name")
' New ASP.NET syntax (retrieving recordset
column value).
MyConn = Server.CreateObject("ADODB.Connection")
MyConn.Open("TestDB")
RS = MyConn.Execute("Select * from Products")
Response.Write RS("Name").Value
%>
仍然支持索引默认属性:
<%
Dim RS As RecordSet
' This is allowed (indexed).
RS.Fields(1).Value = RS.Fields(2).Value
' But these are not allowed (non-indexed).
RS(1) = RS(2)
RS(1).Value = RS(2).Value
%>
● 调用子例程现在需要使用括号。Visual Basic 现在支持与调用子例程和函数完全相同的语法。
' Note parentheses with Response.Write.
Sub DoSomething()
Response.Write("Hello World!")
End Sub
' Note parenthesws with DoSomething.
DoSomething()
● 新默认值是按值参数。 在 Visual Basic 6 中,如果用户没有在参数声明中显式指定 ByVal
或 ByRef,调用约定默认为 ByRef。在新的
Visual Basic .NET 中,默认值为 ByVal。这对常规参数(其默认值通过显式指定
ByRef 可重写)和传递给 ParamArray 参数的参数(其默认值不能重写)都适用。但这已经改变,因为比这常见得多的做法是将参数仅用于将值传入过程,而不是改变传入的变量。将默认值更改为
ByVal 可提高性能并减少意外副作用的可能性。
仍然可以通过显式使用 ByRef 修饰符来使用按引用参数:
<script language="VB" runat=server>
Sub DoSomething(ByRef value)
value = 4343
End Sub
</script>
<%
Dim number = 55
DoSomething (number)
Response.Write ("Number: " & number)
%>
注意: Visual Basic 6 和 Visual Basic .NET 之间还存在其他许多差异。请参考语言文档以获取更多信息。
本节小结
1.ASP 中使用的 VBScript 与 ASP.NET 中使用的 Visual Basic .NET 语言之间的差别是到目前为止所有潜在移植问题中最广泛的。做了更改以简化语言并提高一致性、可读性、可维护性和可靠性。
2.Visual Basic .NET 中不再支持 Set 和 Let 赋值。改为使用标准的变量赋值。
3.Visual Basic .NET 中不支持非索引默认属性。但仍然支持索引默认属性。
4.在 Visual Basic .NET 中调用子例程时需要使用括号。
5.新默认值是按值参数。仍然可以通过显式使用 ByRef 修饰符来使用按引用参数。
感谢2001 Microsoft Corporation教材提供 |
|