我爱Aspx >> VB.Net >> 细说VB.NET(中)首先,向过程参数传递数据的默认方法由引用(ByRef)变成了传值(ByVal)。这个改变主要是因为引用要比传值的风险大得多。它的风险主要是调用过程中的数据可能被无意中篡改。你仍然能通过引用传递数据,但这一改变使你需要修改新的默认调用方法来使用引用。
Set语句消失了
其次,Set 语句消失了。在 VB.NET 里如果你需要向变量传递一个对象引用,所需要的只是一个等号,对象被视为同其它值一样。这很酷,但也有副作用:默认属性消失了。例如,你不再能用这种方式引用一个属性:
Text1 = "What, me worry?"
作为替代,你必须显式地引用属性:
Text1.Text = "What, me worry?"
也许一眼看来不需要这种改变,但确实必须去掉默认属性。例如,假定你有一个叫objFoo的对象变量,不用Set语句,下面的语句所设置的引用就产生了歧义性:
objFoo = Text1
这条语句是应该设置到Text1的引用,还是以Text1的Text属性来填充objFoo?你不能确定,编译器也不能。抛弃Set语句同时要求抛弃默认属性。
有一个改变我不喜欢:你不再能在不同的作用域里声明Property Get和Property Set过程。注意 VB.NET 没有 Property Let 语句:对象和数值都用 Property Set。这意味着你不能用一个 Friend Property Let 过程来对应一个 Public Property Get。用VB建立组件时可能会有麻烦。许多组件开发者创建 Friend Property Set 过程以使他们的应用程序能改变一个值,但提供 Public Property Get 过程以使他们的客户程序能取回值。我希望我能为这个改变找到一个合适的理由,可是我找不到。
Microsoft说它力图使语言保持清晰并使之现代化—大部分情况下它做得不错—但这个作用域问题和其它几个问题令人感到困惑。例如,While...Wend 很早以前就应该消失了,因为 Do...Loop 完成同样的功能。然而,Microsoft 不仅没能去掉 While...Wend,还把它改成了 While...End While 来给自己找了更多的麻烦。真奇怪!
【我对这篇文章有话说?】
细说VB.NET(上)[05-20]
给blood的礼物《A Programmers I..[05-20]
从VB6到VB.NET的变化综述(转)[05-20]
ReDim Preserve 執行效能上的陷阱..[05-20]
Chapter 3 Major VB.NET Changes..[05-20]
Chapter 4 Building Classes and..[05-20]
Chapter 3 Major VB.NET Changes..[05-20]
Chapter 3 Major VB.NET Changes..[05-20]
Chapter 2 Your First VB.NET(2)[05-20]
Chapter 2 Your First VB.NET(1)[05-20]