vb.Net編程簡介之一(轉)

來源:互聯網
上載者:User
編程 使用先前綁定
    Visual Basic 6.0和Visual Basic.NET都支援對象的延遲綁定,
該方法事先定義一個變數為Object資料類型,然後在運行時將其設定為一個類。然而,在升級過程中,當訪問延遲綁定對象的預設屬性時可能會產生錯誤。例如假設工程中包含Form1,Form1中有一個Label對象,名稱為Label1,下面的Visual Basic 6.0代碼將Label的標題
設定為"SomeText"

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

    在Visual Basic.NET的Windows表單中,Label控制項的Caption屬
性被稱為Text屬性。當你的代碼升級後,所有執行個體中的Caption屬性都會轉換為Text屬性,但是延遲綁定對象是無類型(type-less)的,VB無法檢測到對象的類型並做更改,在這種情況下,你需要手工對代碼做改動。當你使用先前綁定對象時,對象可以自動升級,如下:

Dim o As Label
Set o = Me.Label1
o.Caption = "SomeText"

    所以在程式中你需要將對象定義為適當的物件類型而不是簡單的
定義為Object物件類型。

    同Visual C++類似。Visual Basic.NET支援函數的重載,例如下
面的一個函數具有兩個形態

    Environ( Expression As Integer) As String
    Environ( Expression As String ) As String

    Visual Basic.NET會自動檢測該使用那個參數的函數。如果你傳
遞一個正數值到Environ(),那麼正數調用版本會被調用;如果傳遞一個字串,String版本會被調用。如果傳遞Object或者Variant資料類型到一個重載函數將產生執行階段錯誤。如果要想產生正確的結果就需要通過資料類型的強制轉換,例如:

Dim a As String
Dim v As Variant
v = "Path"
a = Environ(CStr(v))   '正確

    對於延遲綁定的對象使用強制類型轉換是一個很好的編程習慣。
這就使得代碼可讀性更好,同時也可以非常輕鬆的移植到Visual Basic.NET使用Date儲存日期/時間較早版本的VB支援使用Double資料類型來儲存和改變時間。
    在Visual Basic.NET中,這個特性將不再支援,因為在電腦內部日期並不是以Double方式儲存的,例如下面的代碼可以在Visual Basic 6.0中運行,但是在Visual Basic.NET中會產生錯誤。

Dim dbl As Double
Dim dat As Date
dat = Now
dbl = dat      '錯誤,不能將一個Date變數賦予一個Double變數
dbl = DateAdd("d", 1, dbl)   '錯誤,Double變數不能用於日期函

dat = CDate(dbl)   '錯誤 CDate函數不能將Double變數轉換到Date

    .NET架構提供了ToOADate與FromOADate函數用於在double變數以
及Date變數之間轉換。然而這需要在升級後手工修改,所以在儲存日期時應該使用Date資料類型。

預設屬性
    在Visual Basic 6.0中,許多個物件都有預設屬性,預設屬性在代
碼中可以省略。例如:

MsgBox Form1.Text1.Text

可以這樣編寫:

MsgBox Form1.Text1   

預設屬性在代碼編譯是決定。同樣,你也可以在延遲綁定的對象中使
用預設屬性,例如:

Dim obj As Object
Set obj = Form1.Text1
MsgBox obj

對於延遲綁定的對象,預設屬性在程式運行時決定。

    Visual Basic.NET不支援預設屬性,當你的工程升級後,
Visual Basic.NET會自動決定預設屬性,但是對於延遲綁定的對象無法自動解決決定預設屬性的問題。在這種情況下,你需要自己來修改代碼。更加複雜的是,很多庫是通過 _Default屬性來實現預設屬性的。_Default象是一個代理,它將調用傳遞給真正的預設屬性。所以當你的工程升級後,一些屬性會被更改為 _Default。代碼還是象往常那樣工作,只是代碼不如原來的實際屬性易讀。

Dim obj As Object
Set obj = Me.Text1
MsgBox obj   '不好的代碼,使用預設屬性
MsgBox Me.Text1   '不好的代碼,使用預設屬性

use:

Dim obj As Object
Set obj = Me.Text1
MsgBox obj.Text   '好的代碼,寫出了屬性
MsgBox Me.Text1.Text   '好的代碼,寫出了屬性

    雖然預設屬性不被Visual Basic.NET支援,但是帶參數的預設屬
性是被支援的,要瞭解它們之間的區別,下面是範例:

Dim rs As ADODB.Recordset
rs("CompanyName") = "SomeCompany"
rs!CompanyName = "SomeCompany"

實際上等於:

Dim rs As ADODB.Recordset
rs.Fields("CompanyName").Value = "SomeCompany"
rs.Fields!CompanyName.Value = "SomeCompany"

因為Value是Fields的預設屬性對於第二種寫法,Visual Basic.NET是支援的;然而第一種情況不被支援,那麼正確的用法如下:

Dim rs As ADODB.Recordset
rs("CompanyName").Value = "SomeCompany"
rs!CompanyName.Value = "SomeCompany"

    象上面的範例和其它的大多數情況可以在工程升級時解決,但是
你還是要避免在Visual Basic 6.0中在Object和Variant資料類型使用預設屬性。因為升級程式無法發現並解決這些錯誤。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。